如何在Go中操作文本文件

作为一种编程语言,go 具有广泛的内置功能,包括创建、读取和写入文本(.txt)文件等文件的功能。 文件是现代世界我们日常生活的重要组成部分。文本文件对于存储结构化的人类可读数据非常有用,而无需使用外部软件或数据库。 如果您想知道如何开始在go中操作文本文件,那么本文是适合您的地方。
go 中的 bufio 包
bufio 包是 go 标准库的一部分,用于缓冲输入和输出操作,因此得名。bufio 包基于 io.reader 和 io.writer 接口构建,它们广泛用于大多数 go 标准包的实现。 bufio 包通过实现缓冲更进一步,使其对涉及文本数据的 io 操作很有用。 要在您的程序中使用 bufio 包,您应该将它与其他包一起导入。
import ( fmt bufio)  当您开始使用 go 时,您可能听说过它包含作为程序员可能需要的一切。为了与您的操作系统直接通信,有一个名为 os 的包,它提供了与平台无关的功能。 os 和 bufio 包使文本文件操作变得异常简单。 尽管 os 包的绝大多数函数都是类 unix 的,但它们都采用 go 风格的错误处理,这使得阅读错误消息和调试代码变得简单。 那么,如何在go中操作包含文本的文件呢?  
如何从文本文件中读取数据
要从文本文件中读取数据,您需要调用 os 包的 open() 函数,该函数接受要读取的文件名作为参数。获取文件的另一种方法是使用 openfile() 函数。 open() 和 openfile() 之间的主要区别在于它们的实现。open() 以只读模式打开文件(使用 o_rdonly 标志),而 openfile() 通过接受三个参数来提供更大的灵活性,即:
文件名
文件打开模式:有效的文件打开模式如下表所示。
标志 含义
o_rdonly 以只读模式打开文件
o_wronly 以只写模式打开文件
o_rdwr 以读写模式打开文件
o_append 写入时将数据追加到文件
o_create 创建新文件(如果不存在)
o_excl 与o_create一起使用,以指示仅当文件不存在时才应创建该文件
o_sync 打开同步 i/o 的文件
o_trunc 如果可能,在打开时截断文件
文件权限:与 linux 中用于指定文件访问规则的文件权限位相同,例如,0777 向所有用户类型授予读取、写入和执行权限。
下面的代码展示了如何使用 os.open() 和 scan() 从 go 中的文本文件中读取数据, 在本例中,scan() 在 go for 循环中运行。
package mainimport ( bufio fmt log os)/** content of the linuxmi.txt file. lorem ipsum dolor sit amet lorem ipsum dolor sit amet lorem ipsum dolor sit amet lorem ipsum dolor sit amet lorem ipsum dolor sit amet lorem ipsum dolor sit amet*/func main() { file, err := os.open(linuxmi.txt) // another method using os.openfile() // file, err = os.openfile(linuxmi.txt, os.o_rdonly, 0644) if err != nil { log.fatal(err) } defer file.close() fmt.println(file opened successfully. now reading file contents line by line:) // create scanner from the file to read text from scanner := bufio.newscanner(file) // scan or read the bytes of text line by line for scanner.scan() { fmt.println(scanner.text()) } if err := scanner.err(); err != nil { log.fatal(err) }}  
运行上面的代码,它会产生如下所示的输出:
从文件中读取文本的程序输出
如果你只传入文件名而不是 open() 或 openfile() 函数的路径以进行读取操作,go 会假定文件在当前目录中,如果找不到则返回错误。如果您需要处理当前目录之外的文件,您应该传入文件的路径。
如何将数据写入文本文件
bufio 包提供了一个缓冲的 writer 接口,该接口存储数据字节并在 flush() 函数的帮助下将它们写入文件。
下一个示例代码是读取文件的延续。在此示例中,使用 o_wronly 和 o_append 标志将数据写入现有的 linuxmi.txt。
将以下代码行添加到上面的程序中,在 main() 函数的右花括号之前:
// 将输出数据写入文件 file, err = os.openfile(linuxmi.txt, os.o_append|os.o_wronly, 0644) if err != nil { log.fatal(err) } defer file.close() fmt.println(文件打开成功,正在准备将数据写入文件...) // 创建缓冲的 writer 对象以将数据写入文件 textwriter := bufio.newwriter(file) // 在保存文件之前将字符串写入缓冲区。 _, err = textwriter.writestring(-这是添加到文件中的新文本。) if err != nil { log.fatal(err) } textwriter.flush() fmt.println(数据写入文件成功...)  
完整程序的输出应如下所示:
程序的输出以读取和写入文本文件
当您打开 linuxmi.txt 文件时,您还将看到文件末尾附加的新行,如下图所示:
go 中的文件处理非常简单
go 允许您处理各种文件,而不仅仅是文本文件。有许多额外的内置库和函数用于处理来自文件的不同类型的数据,包括 json 和 csv。
要查看它们在不同情况下的行为方式有何不同,您可以尝试可用于 openfile() 的各种标志和文件权限。


一文详解倍压整流电路
陶瓷电容在智能手机中有什么作用呢?
激光焊接技术在焊接0.2mm铝合金的工艺
低钴及无钴化电池即将成为下一代动力电池的方向
维修过程中,电源开关不小心爆炸啦!
如何在Go中操作文本文件
超详细的机械设计基础知识点
工信部印发工业互联网标识管理办法
旅行者一号、二号距地球近200亿公里——靠什么传回地球信号?
云计算与多层次将成未来数据中心主流
小米发布智能管状电机 999元起享智能升降
传感财经:电子油门概念报跌,电子元器件概念报跌,光学传感器概念午间收盘报涨
一加电视产品将采用8个扬声器和配备杜比全景声
无人驾驶汽车的基本技能还看华为的自动驾驶之路
全面屏iPad或将今年推出 苹果注册两款新iPad型号
dfrobotXBee扩展板介绍
工程师说 | 瑞萨电子AD/ADAS战略概述
预测2020年Kubernetes的五种趋势
市场预测:2013年EMS增长成定势
讲解SystemVerilog中对于process的多种控制方式