Go语言读取txt文档并批量处理文件内容
本文介绍如何在Go语言中读取TXT文档,处理其中的数据并将其转换为新文件名。主要步骤包括:使用ioutil.ReadFile()读取整个文件内容,用strings.Split()按行分割,对每行的数据进行空格切割和下划线拼接,最后生成新的.md文件名。代码展示了如何处理文件读取错误和检查文件是否存在,适合需要批量处理文本文件的场景。
目标与结果
本教程旨在演示如何使用 Go 读取 TXT 文档,并对文档中的每一行数据进行处理。具体目标是:解析每行以空格分隔的文件名信息,提取前三个字段并用下划线连接,追加 .md 后缀,最终根据生成的文件名在本地创建对应的文件或提示已存在。
准备条件
- 安装 Go 语言环境。
- 准备一个包含文件名信息的 TXT 文件(例如 file1.txt),确保每行数据格式正确,不同项之间以空格分隔。
- 理解基本的 Go 语法结构,如包导入、函数定义和循环。
真实操作顺序
第1步:读取 TXT 文件内容
目的:将整个 TXT 文件的内容一次性加载到内存中,以便后续处理。
入口:使用 ioutil.ReadFile() 函数。
动作:
- 指定文件路径,例如 "file1.txt"。
- 调用
ioutil.ReadFile(fileName)读取文件。 - 检查返回的错误。如果发生错误,输出提示信息;否则继续。
- 将读取到的字节切片
[]bytes转换为字符串类型string。
package main
import (
"fmt"
"io/ioutil"
"strings"
"os"
)
func main() {
fileName := "file1.txt" // txt文件路径
data, err_read := ioutil.ReadFile(fileName) // 读取文件
if err_read != nil {
fmt.Println("文件读取失败!")
}
}
第2步:按行分割文件内容
目的:将读取到的长字符串按照换行符分割成多行,便于逐行处理。
入口:使用 strings.Split() 函数。
动作:
- 使用
strings.Split(string(data), "\n")将字符串按换行符分割为字符串切片。
dataLine := strings.Split(string(data), "\n") // 将文件内容作为string按行切片
var dataNameSlice [][]string // 用于存储每行内容的Slice
var dataName []string // 整理每行内容成一个string
第3步:逐行处理文件名信息
目的:对每一行数据进行解析,提取所需部分并格式化为新文件名。
入口:遍历 dataLine 切片。
动作:
- 初始化两个切片:
dataNameSlice存储每行按空格分割后的结果,dataName存储格式化后的完整文件名。 - 对于每一行,使用
strings.Split(line, " ")按空格分割存入dataNameSlice。 - 使用
strings.Join(dataNameSlice[i][:3], "_")将每行切片的前三个元素以下划线连接。 - 在拼接后的字符串后添加 ".md" 后缀,并存入
dataName切片。
for i, line := range(dataLine) {
dataNameSlice = append(dataNameSlice, strings.Split(line, " ")) // 每行内容按空格分割成切片
dataName = append(dataName, strings.Join(dataNameSlice[i][:3], "_")) // 每行内容切片的前3项用_连成string
dataName[i] = dataName[i] + ".md"
// fmt.Println(dataName[i])
}
第4步:根据新文件名创建或检查文件
目的:根据生成的新文件名,判断文件是否已存在。若不存在则创建,否则输出提示。
入口:使用 os.Stat() 和 os.Create()。
动作:
- 遍历
dataName切片中的每个文件名。 - 使用
os.Stat(dataNameString)检查文件状态。 - 如果文件不存在(通过
os.IsNotExist(err)判断),则使用os.Create(dataNameString)创建该文件。 - 如果文件已存在,则打印提示信息。
for i, dataNameString := range(dataName) {
if _, err := os.Stat(dataNameString); os.IsNotExist(err) { // 判断文件是否存在
os.Create(dataNameString)
} else {
fmt.Printf("%d. [%s] File already exist!\n", i, dataNameString)
}
}
第5步:补充按行读取方式(可选)
目的:了解另一种常见的按行读取文件的方式,适用于大文件或流式处理场景。
入口:使用 bufio.Scanner。
动作:
- 使用
os.Open()打开文件。 - 创建
bufio.Scanner实例。 - 使用
scanner.Scan()循环读取每一行。
file, err := os.Open("app-2019-06-01.log")
if err != nil {
log.Fatal(err)
}
defer file.Close()
scanner := bufio.NewScanner(file)
for scanner.Scan() {
lineText := scanner.Text()
}
完成判断
当程序成功运行且未报错时,即为完成。可通过以下方式验证:
- 控制台无错误输出。
- 指定的目录下生成了对应的新文件(以 .md 结尾)。
- 若文件已存在,控制台会打印相应提示。
简要总结
以上就是Go语言读取txt文档并批量处理文件内容的详细内容,更多关于Go读取txt文档的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













