Go 如何按行读取(大)文件?尝试 bufio 包提供的几种方式
在Go中,你可以使用bufio
包来按行读取大文件。以下是几种方法:
- 使用
bufio.Scanner
进行逐行读取:
package main
import (
"bufio"
"fmt"
"log"
"os"
)
func main() {
file, err := os.Open("large_file.txt")
if err != nil {
log.Fatal(err)
}
defer file.Close()
scanner := bufio.NewScanner(file)
for scanner.Scan() {
// 处理每行文本
fmt.Println(scanner.Text())
}
if err := scanner.Err(); err != nil {
log.Fatal(err)
}
}
- 使用
bufio.Reader
的ReadString
方法读取到换行符:
package main
import (
"bufio"
"fmt"
"log"
"os"
)
func main() {
file, err := os.Open("large_file.txt")
if err != nil {
log.Fatal(err)
}
defer file.Close()
reader := bufio.NewReader(file)
for {
line, err := reader.ReadString('\n')
if err != nil {
break // 到文件末尾或发生错误
}
// 处理每行文本
fmt.Print(line)
}
if err != io.EOF {
log.Fatal(err)
}
}
这两种方法都可以处理大文件,bufio.Scanner
更加简洁,推荐使用。记得处理文件的打开和关闭,以及错误检查。
评论已关闭