Go语言读取txt文档并批量处理文件内容

Aria
Aria
发布时间:2026-10-16| 6人浏览过
原创

本文介绍如何在Go语言中读取TXT文档,处理其中的数据并将其转换为新文件名。主要步骤包括:使用ioutil.ReadFile()读取整个文件内容,用strings.Split()按行分割,对每行的数据进行空格切割和下划线拼接,最后生成新的.md文件名。代码展示了如何处理文件读取错误和检查文件是否存在,适合需要批量处理文本文件的场景。

目标与结果

本教程旨在演示如何使用 Go 读取 TXT 文档,并对文档中的每一行数据进行处理。具体目标是:解析每行以空格分隔的文件名信息,提取前三个字段并用下划线连接,追加 .md 后缀,最终根据生成的文件名在本地创建对应的文件或提示已存在。

准备条件

  • 安装 Go 语言环境。
  • 准备一个包含文件名信息的 TXT 文件(例如 file1.txt),确保每行数据格式正确,不同项之间以空格分隔。
  • 理解基本的 Go 语法结构,如包导入、函数定义和循环。

真实操作顺序

第1步:读取 TXT 文件内容

目的:将整个 TXT 文件的内容一次性加载到内存中,以便后续处理。

入口:使用 ioutil.ReadFile() 函数。

动作:

  1. 指定文件路径,例如 "file1.txt"。
  2. 调用 ioutil.ReadFile(fileName) 读取文件。
  3. 检查返回的错误。如果发生错误,输出提示信息;否则继续。
  4. 将读取到的字节切片 []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() 函数。

动作:

  1. 使用 strings.Split(string(data), "\n") 将字符串按换行符分割为字符串切片。
dataLine := strings.Split(string(data), "\n") // 将文件内容作为string按行切片
var dataNameSlice [][]string                  // 用于存储每行内容的Slice
var dataName []string                         // 整理每行内容成一个string

第3步:逐行处理文件名信息

目的:对每一行数据进行解析,提取所需部分并格式化为新文件名。

入口:遍历 dataLine 切片。

动作:

  1. 初始化两个切片:dataNameSlice 存储每行按空格分割后的结果,dataName 存储格式化后的完整文件名。
  2. 对于每一行,使用 strings.Split(line, " ") 按空格分割存入 dataNameSlice。
  3. 使用 strings.Join(dataNameSlice[i][:3], "_") 将每行切片的前三个元素以下划线连接。
  4. 在拼接后的字符串后添加 ".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()。

动作:

  1. 遍历 dataName 切片中的每个文件名。
  2. 使用 os.Stat(dataNameString) 检查文件状态。
  3. 如果文件不存在(通过 os.IsNotExist(err) 判断),则使用 os.Create(dataNameString) 创建该文件。
  4. 如果文件已存在,则打印提示信息。
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。

动作:

  1. 使用 os.Open() 打开文件。
  2. 创建 bufio.Scanner 实例。
  3. 使用 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文档的资料请关注本站其它相关文章!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。