go 逐行读取文件
前言
文件 I/O,特别是对文件的读写是编程语言中重要的功能。通常,我们需要逐行读取文件。
GO 提供了 bufio 软件包,实现了有缓冲的 I/O。它包装一个 io.Reader 或 io.Writer 接口对象,创建另一个也实现了该接口,且同时还提供了缓冲和一些文本 I/O 的帮助函数的对象。
在读取文件之前,我们首先需要使用 os.Open() 函数将其打开,该函数返回指向文件的指针类型。代码段中显示的 D:\\go_work\\test.txt 文件需要已经存在在系统中(将路径放置到文件所在的位置)。
bufio.NewScanner(file) 函数创建并返回一个从 r 读取数据的 Scanner 类型,该类型中的函数支持读取文件,其中默认的分割函数是 ScanLines。
要逐行读取文件,我们需要使用两种在新的 Scanner 的方法 Scan,它会获取当前位置的 token(该 token 可以通过 Bytes 或 Text 方法获得,在本例中为新行),并让 Scanner 的扫描位置移动到下一个 token,和 Text(或 Byte)读取调用 Scan 时生成的最新符记。
如果在读取文件时遇到任何错误,可以通过在新的 Scanner 上调用 Err() 方法来处理这些错误,该方法将返回 Scanner 遇到的第一个非文件结尾错误;除非是 io.EOF,此时 Err 会返回 nil。
Go 逐行读取文件的完整代码
package main
import (
"bufio"
"fmt"
"log"
"os"
)
func main() {
// open the file
file, err := os.Open("D:\\go_work\\test.txt")
// handle errors while opening
if err != nil {
log.Fatalf("Error when opening file: %s", err)
}
defer file.Close()
fileScanner := bufio.NewScanner(file)
// read line by line
for fileScanner.Scan() {
fmt.Println(fileScanner.Text())
}
// handle first encountered error while reading
if err := fileScanner.Err(); err != nil {
log.Fatalf("Error while reading file: %s", err)
}
}
配置 Scanner 行为
Scanner 类型具有 Split 函数,该函数接受 SplitFunc 函数来确定 Scanner 如何拆分给定的字节片。默认的 SplitFunc 是 ScanLines,它将返回文本的每一行,并删除行尾标记。
例如,我们可以使用单词进行拆分,如下面的代码片段所示:
scanner.Split(bufio.ScanWords) //configure how the scanner behaves
go 逐行读取文件的更多相关文章
- android逐行读取文件内容以及保存为文件
用于长时间使用的apk,并且有规律性的数据 1,逐行读取文件内容 //首先定义一个数据类型,用于保存读取文件的内容 class WeightRecord { String timestamp; flo ...
- python中逐行读取文件的最佳方式_Drupal_新浪博客
python中逐行读取文件的最佳方式_Drupal_新浪博客 python中逐行读取文件的最佳方式 (2010-08-18 15:59:28) 转载▼ 标签: python ...
- c#逐行读取文件到数组
/// <summary> /// 逐行读取文件到泛型数组 /// </summary> /// <param name="FilePath"> ...
- shell逐行读取文件内容
shell 中逐行读取文件内容 1.语法简介 #!/bin/bash <<EOF shell 中逐行读取文件内容的语法如下所示. 这里虽然很简单,但是再配合上其他的工具,如sed,awk, ...
- Shell逐行读取文件的3种方法
方法1:while循环中执行效率最高,最常用的方法. while read linedoecho $linedone < filename 注释:这种方式在结束的时候需要执行文件,就好像是执行 ...
- 有关fgetc配合feof逐行读取文件最后一行读取两遍的错觉?
最近在做一个wifiap设置的接口,用户首先获取到当前wifi 热点的ssid 和pwd,然后修改,保存. 获取信息的时候是fopen对应的hostapd.conf文件,逐行读取,查找匹配的参数. 修 ...
- Linux shell逐行读取文件的方法
方法1:while循环中执行效率最高,最常用的方法. function while_read_line_bottom(){ while read line do echo $line done < ...
- python 逐行读取文件的三种方法
方法一: 复制代码代码如下: f = open("foo.txt") # 返回一个文件对象 line = f.readline() ...
- Python逐行读取文件内容
更详细的文件按行读取操作可以参考:http://www.cnblogs.com/xuxn/archive/2011/07/27/read-a-file-with-python.html 一行一行得从文 ...
- golang 逐行读取文件
package main import ( "bufio" "fmt" "io" "os" ) func main() ...
随机推荐
- Qt边推流边录制/实时性好延迟低/16路1080P推流加录制只占1%CPU/优化到极致
一.前言 这个一边推流一边录制的功能,有很多用户提到过,之前因为时间的原因,一直没有搞,年初的时候索性抽空搞了下,也着实费了些功夫.推流用的是ffmpeg这个开源的牛逼的第三方库,搞音视频开发的人应该 ...
- 如何在众多Ubuntu版本中挑选出最适配自身需求的系统版本?用德承工控机GM-1100来深度剖析其中的门道
Ubuntu是一款基于Debian GNU/Linux,支持x86.amd64(x64)和ppc架构,以桌面应用为主的Linux操作系统.其名称来自非洲南部的语言"ubuntu"( ...
- [转]C++中strcpy()函数和strcpy_s()函数的使用及注意事项
原文链接:C++中strcpy()函数和strcpy_s()函数的使用及注意事项
- COCI 2024/2025 #3
T1 P11474 [COCI 2024/2025 #3] 公交车 / Autobus 愤怒,从红升橙足以说明其恶心,考场上调了半小时才过. 这道题的车能够开 \(24\) 小时,并且他能从前一天开到 ...
- Windows安全加固(二)
三.本地安全策略用户权限分配 1. 使用windows+R打开运行,输入"secpol.msc"打开本地安全策略->本地策略->用户权限分配->找到"拒 ...
- MAC 使用问题汇总
1. 在.zshrc中添加的环境变量不起作用 Answer: 需要把/etc/zshrc文件复制到 ~, 并命名为.zshrc,然后设置环境变量即可:
- 【源码】ByteToMessageDecoder对比自定义实现
前言 在上一篇随笔中,我们探讨了如何实现一套自定义通信协议,其中涉及到的粘包和拆包处理最初是完全自定义实现的,后来则改为了继承 ByteToMessageDecoder 来简化处理. 本篇将重点讨论这 ...
- Qml 中实现时间轴组件
[写在前面] 时间轴组件是现代用户界面中常见的元素,用于按时间顺序展示事件. 本文将介绍如何使用 Qml 实现一个灵活且可定制的时间轴组件,并探讨其设计思路和实现细节. [正文开始] 效果图 组件概述 ...
- C 简答题
1.从C语⾔执⾏效率⽅便,简述下C语⾔采取了哪些措施提⾼执⾏效率.(14分 or 20分)(年年考,⾮常重要) ①使⽤指针:有些程序⽤其他语⾔也可以实现,但C能够更有效地实现:有些程序⽆法⽤其它语⾔实 ...
- .Net类型 值类型
预定义类型值类型 数据类型C#关键字(如 int.short 和 string) 从编译器映射到.NET数据类型.例如,在C#中声明一个int类型的数据时声明的实际是.Net System.Int32 ...