Go语言删除文本文件中的指定行操作代码

 更新时间:2023年12月20日 10:50:29   作者:畱䶒  
假设现在有一个文本文件,我们需要删除文件中乱码的行。我们可以使用go的os库来处理文件,遍历整个文件然后将除过乱码的行写入一个新文件,以此来实现我们的需求,这篇文章主要介绍了Go语言删除文本文件中的指定行,需要的朋友可以参考下

1. 思路

假设现在有一个文本文件,我们需要删除文件中乱码的行。我们可以使用go的os库来处理文件,遍历整个文件然后将除过乱码的行写入一个新文件,以此来实现我们的需求。

2. 处理文件

假设我们现在有一个配置文件hello.conf,用户经常修改导致文件错乱或出现乱码情况,我们需要去除乱码行以保证配置文件可用。
如下一个示例文件,注释使用#加文本,配置信息使用等号分隔,我们需要去除掉文件中的空行、乱码行、不包含=和#的行和包含#号却不在开头的行。

#系统版本
version=v1.0.0
#系统平台
platform=arm
#数据库信息
database=127.0.0.1;3306;123456;mysql
@1234
#https端口
httpsport=8443
8443#dd
#用于开启https的设置
enablehttps=false
#插入数据库是否携带服务名称
is.add.name=false
#设备型号
model=RTD-1

首先以可读写的方式打开文件,并使用换行符来遍历文件。通过特定条件筛选出可用行,并将其写入新文件中,最后修改新创建的文件,完成处理。

package 
import (
	"bufio"
	"io"
	"log"
	"os"
	"strings"
)
const (
	FILE = "hello.conf"
	NEWFILE = "hellonew.conf"
)
func main() {
	deleteBadLine()
}
func deleteBadLine() {
	//以可读写方式打开文件
	file, err := os.OpenFile(FILE, os.O_RDWR, 0666)
	if err != nil {
		log.Fatal(err)
	}
	defer file.Close()
	//创建一个文件并以可读写方式打开
	destFile, err := os.OpenFile(NEWFILE, os.O_CREATE | os.O_RDWR, 0666)
	if err != nil {
		log.Fatal(err)
	}
	defer destFile.Close()
	//将文件内容写入缓冲区中
	reader := bufio.NewReader(file)
	for {
		//以换行符来遍历文件
		line, err := reader.ReadString('\n')
		if err != nil {
			log.Fatal(err)
		}
		//读到文件结尾
		if err == io.EOF {
			break
		}
		//根据特定条件筛选行
		if len(line) == 0 || line == "\r\n" || !strings.Contains(line, "=") && !strings.Contains(line, "#") || strings.Contains(line, "#") && !strings.HasPrefix(line, "#") {
			log.Println("Bad line:", line)
			continue
		} else {
			log.Println("Normal line:", line)
			//将可用的行写入新文件
			if _, err = destFile.WriteString(line); err != nil {
				log.Fatal(err)
			}
		}
	}
	//处理完毕,将新创建的文件重命名
	//linux系统可以通过重命名来覆盖静态文件,若其他系统,则需要先进行删除或备份,再重命名
	os.Rename(NEWFILE, FILE)
}

3. 处理后的文本文件

#系统版本
version=v1.0.0
#系统平台
platform=arm
#数据库信息
database=127.0.0.1;3306;123456;mysql
#https端口
httpsport=8443
#用于开启https的设置
enablehttps=false
#插入数据库是否携带服务名称
is.add.name=false
#设备型号
model=RTD-1

到此这篇关于Go语言删除文本文件中的指定行的文章就介绍到这了,更多相关Go语言删除指定行内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Go语言中的访问权限控制

    Go语言中的访问权限控制

    在 go 中进行权限管理时,推荐使用 grouper、casbin 和 sentry 框架,grouper 适合基于角色的访问控制,casbin 提供高级 rbac 功能,而 sentry 提供云托管权限服务和丰富的功能集,包括多因素认证和活动审核,这些框架有助于在电子商务网站等实际场景中实施细粒度的访问控制
    2024-08-08
  • 如何使用Golang发送Get和Post请求

    如何使用Golang发送Get和Post请求

    这篇文章主要给大家介绍了关于如何使用Golang发送Get和Post请求的相关资料,Go语言(Golang)的标准库提供了处理HTTP请求的功能,这使得将Go用于web应用程序变得非常容易,需要的朋友可以参考下
    2023-06-06
  • 深入刨析Golang-map底层原理

    深入刨析Golang-map底层原理

    这篇文章主要介绍了深入刨析Golang-map底层原理,Go 语言的 map 的使用非常简易, 但其内部实现相对比较复杂,文中有相关的代码示例,,需要的朋友可以参考下
    2023-05-05
  • golang版本升级如何实现

    golang版本升级如何实现

    这篇文章主要介绍了golang版本升级如何实现问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-07-07
  • 关于go-zero服务自动收集问题分析

    关于go-zero服务自动收集问题分析

    这篇文章主要介绍了关于go-zero服务自动收集问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-12-12
  • Go语言字符串拼接方式与性能比较分析

    Go语言字符串拼接方式与性能比较分析

    这篇文章主要为大家介绍了Go语言字符串拼接方式与性能比较示例分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • Go高级特性探究之对象比较详解

    Go高级特性探究之对象比较详解

    在go语言中,要比较两个对象是否完全相同,我们可以使用三种方法,这篇文章主要为大家介绍了这三种方法的具体实现,需要的可以参考一下
    2023-06-06
  • Golang创建构造函数的方法超详细讲解

    Golang创建构造函数的方法超详细讲解

    构造器一般面向对象语言的典型特性,用于初始化变量。Go语言没有任何具体构造器,但我们能使用该特性去初始化变量。本文介绍不同类型构造器的差异及其应用场景
    2023-01-01
  • 重学Go语言之变量与常量的声明与使用详解

    重学Go语言之变量与常量的声明与使用详解

    变量、常量的声明与使用是掌握一门编程语言的基础,在这篇文章中,小编就来带大家学习一下Go语言是怎么样声明和使用变量与常量吧
    2023-03-03
  • Go标准库encoding/gob的具体使用

    Go标准库encoding/gob的具体使用

    Go标准库encoding/gob实现二进制序列化与反序列化,本文主要介绍了Go标准库encoding/gob的具体使用,感兴趣的可以了解一下
    2025-06-06

最新评论