GO 中如何在逐行高效地逐行读取文件
文件 I/O,特别是对文件的读写是编程语言中重要的功能。通常,你需要逐行读取文件。GO 提供了 bufio
软件包,该软件包基本上实现了缓冲的 I/O。bufio
提供有用的类型和函数,特别是用于读取和写入文本文件。
包和必要的 Import
package main
import(
"fmt"
"bufio"
"log"
"os"
)
我们将需要从 GO 标准库中导入多个文件:-
- OS - 用于独立于平台的 OS 函数接口
- FMT - 实现格式化的 I/O 函数
- log - 标准日志记录包
- bufio - 支持缓冲的 I/O
Go 中对文件逐行读取
在读取文件之前,首先需要使用 os.Open()
函数将其打开,该函数返回指向文件的指针类型。代码段中显示的 test.txt
文件需要已经存在在系统中(将路径放置到文件所在的位置)。
bufio.NewScanner(file)
函数返回 scanner
类型,该类型中的函数支持读取文件。
要逐行读取文件,我们需要使用两种在新的 Scanner
的方法-Scan
,它会将 Scanner
前进到新的符记(在本例中为新行),和 Text
(或 Byte
)读取调用 Scan
时生成的最新符记。
如果在读取文件时遇到任何错误,可以通过在新的 Scanner
上调用 Err()
方法来处理这些错误,该方法将返回 Scanner
遇到的第一个非文件结尾错误。
func main(){
// open the file
file, err := os.Open("test.txt")
//handle errors while opening
if err != nil {
log.Fatalf("Error when opening file: %s", err)
}
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)
}
file.Close()
}
Go 中逐行读取文件的完整代码
下面提供了 main.go
中用于逐行读取文件的完整代码。
你需要输入:
$ go run main.go
在终端中运行程序。
package main
import (
"bufio"
"fmt"
"log"
"os"
)
func main() {
// open the file
file, err := os.Open("test.txt")
//handle errors while opening
if err != nil {
log.Fatalf("Error when opening file: %s", err)
}
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)
}
file.Close()
}
在 Go 中配置 Scanner
行为
Scanner
类型具有 Split
函数,该函数接受 SplitFunc
函数来确定 Scanner
如何拆分给定的字节片。默认的 SplitFunc
是 ScanLines
,它将返回文本的每一行,并删除行尾标记。
例如,我们可以使用单词进行拆分,如下面的代码片段所示:-
scanner.Split(bufio.ScanWords) //configure how the scanner behaves
相关文章
MySQL 中如果列存在,则删除该列
发布时间:2023/05/08 浏览次数:188 分类:MySQL
-
在本篇文章中,我们将学习如何删除 MySQL 中存在的单个或多个列。如果列存在于 MySQL 中,则删除该列 在表格中,列是一行单元格,可以包含文本、数字和图形。 对于表中的每一行,每列中存
如何在 C 语言中获取数组的大小
发布时间:2023/05/07 浏览次数:92 分类:C语言
-
本教程介绍了 C 语言中确定数组大小的方法。本教程介绍了在 C 语言中使用 sizeof()运算符的方法。
如何在 CentOS 中获取 IP 地址
发布时间:2023/05/04 浏览次数:108 分类:操作系统
-
这篇简短的文章是对 CentOS 的一个简短介绍,然后简要讨论了我们如何使用命令行界面 (CLI) 在 CentOS 中获取服务器 IP 地址。
在 Python 中如何检查文件是否为空
发布时间:2023/04/26 浏览次数:180 分类:Python
-
我们将学习如何检查文件是否为空。 我们还查看了在 Python 中检查空文件时引发的不同问题。
如何在 Python中创建Defaultdict的Defaultdict
发布时间:2023/04/24 浏览次数:74 分类:Python
-
在 Python 中,Defaultdict 非常适合处理按键错误,本文将介绍如何创建 defaultdict 的 defaultdict。
如何在 Python 中获取字典交集
发布时间:2023/04/24 浏览次数:131 分类:Python
-
本文讨论了在 Python 中对两个字典或多个字典执行交集以轻松高效地创建新字典的不同方法。
如何在 Python 中创建包
发布时间:2023/04/24 浏览次数:139 分类:Python
-
在本文中,我们将研究如何在 Python 中创建包。 包是一个可重用的代码文件,我们可以通过从包中导入主文件并使用这些文件中定义的其余函数和定义来将其用于多种用途。
如何在 Python 中获取字典值
发布时间:2023/04/22 浏览次数:161 分类:Python
-
在 Python 中,字典(dictionary)是一种无序的数据类型,可以用键(key)来访问对应的值(value)。本文将介绍如何在 Python 中获取字典的值,包括获取单个值、获取所有值、以及遍历字典