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数据库应用8-数据导出组件示例说明
一.前言 为了方便用户学习使用本组件,特意针对每个功能模块,每种可能的应用场景,都编写了对应的示例demo,从初级示例到中级示例再到高级示例以及多线程示例等,层层加码,针对结构体数据都做了相当详细细致 ...
- IM开发干货分享:万字长文,详解IM“消息“列表卡顿优化实践
本文由融云技术团队原创分享,原题"万字干货:IM "消息"列表卡顿优化实践",为使文章更好理解,内容有修订. 1.引言 随着移动互联网的普及,无论是IM开发者还 ...
- 1011. 在 D 天内送达包裹的能力
在 D 天内送达包裹的能力 传送带上的包裹必须在 days 天内从一个港口运送到另一个港口. 传送带上的第 i 个包裹的重量为 weights[i].每一天,我们都会按给出重量(weights)的顺序 ...
- Golang-函数5
http://c.biancheng.net/golang/func/ Go语言函数(Go语言func) 函数构成了代码执行的逻辑结构,在Go语言中,函数的基本组成为:关键字 func.函数名.参数列 ...
- APSI - 0
最近安装了APSI库,尝试了多种方法,现在总结一下! 先提下安装环境需求: 第三方依赖包: Mac vcpkg 使用vcpkg一键安装 1.先安装vcpkg (1)第一种方法 git clone gi ...
- ECharts中实现x轴中的坐标以不同间距显示的效果
1.需求描述 我们日常在使用ECharts实现曲线图或柱状图的时候,x轴上的坐标都是等距离显示的. 有时候我们可能有这个需求: x轴上的坐标距离按照对应数据的比例进行显示. 打个比方,假设x轴上有5个 ...
- [记录点滴] 一个解决Lua 随机数生成问题的办法
[记录点滴] 一个解决Lua 随机数生成问题的办法 0x00 摘要 本文是开发中的简略记录,具体涉及知识点有:Lua,随机数. 0x01 背景 Lua语言生成随机数需要用到两个函数: math.ran ...
- 流程控制之增强for循环
语法 for (声明语句:表达式){ //代码语句} 实例: package com.yeyue.struct;public class ForDemo05 { public stati ...
- 访问控制模型 ABAC 的使用和设计原则
访问控制(AC)的发展历程 访问控制(Access Control, AC)是保护系统资源的重要机制,决定"谁"可以访问"哪些"资源,并能执行"哪些操 ...
- C# 全角字符和半角字符相互转换
参考链接:https://blog.csdn.net/willingtolove/article/details/106923879 1. 全角转半角 /// <summary> /// ...