如何使用python批量修改txt文档

1 - 目标

因为需要整理深度学习的数据集,需要手动改写一些txt数据集对应的初始项目

如何使用python批量修改txt文档_第1张图片

如何使用python批量修改txt文档_第2张图片

如图,我需要把71改成2 ; 把73删除 ; 把57改成3 ;改57成3且同时把2删除

因为有上千个这样的txt文件,所以假如手动修改的话需要很长时间

因此写一个python文件是最方便的,能在半分钟内全部搞定

2 - python源码加注释

        开头:

import os  # 只需要引入这个系统控制的库

# 定义一个path变量,里面是存着所以需要改的txt文件的文件夹名称
path = 'E:/C2/UART/datamingjie/1144images_dataset/1144images_aryan/txt'
# 系统列表出所有path文件夹里面文件的名称 (此操作并不会有序遍历所有文件,因此需要下一条代码排列)
total_txt = os.listdir(path)
# 通过文件名格式前的数字大小按升序排列
total_txt.sort(key=lambda x: int(x.split('.')[0]))

        功能一 : 将所有的txt文件名字改成从 1 - 全部

        (改名让txt更有序可辨认,且可以简单测试一下python环境的设置)

# 功能一
i = 0  # 设定变量i用作命名txt文件

# 遍历前面读取的所有有序排列的文件
for file in total_txt:
    i += 1  # 每次加1

    # 两个路径用来改名
    oldfile = path+'/'+str(file)
    newfile = path+'/'+str(i)+'.txt'

    # os库直接改名
    os.rename(oldfile, newfile)

        功能二 :本文中最主要的功能,修改批量修改txt文档中的内容

deleteList = []  # 设定变量deleteList,随后print出来

# 遍历前面读取的已修改的有序文件
for file in total_txt:
    fileName = path + '/' + file
    verify = 0  # 定义判断变量用来决定文件是否删除

    file = open(fileName, 'r')  # 打开文件阅读模式
    lines = file.readlines()  # 返回列表形式的内容

    # 以行为单位遍历文件内容(index是行数,line是单行内容)
    for index, line in enumerate(lines):
        strT = lines[index]  # 读取当前行的内容

        if strT[0:2] == "71":  # 切片判断前两个字符
            strT = "2"+strT[2:]  # 改成2加字符第二位往后
            lines[index] = strT  # 改写lines中的内容
            verify = 1  # 验证文件有需要保存的内容

        # 与上述同理
        elif strT[0:2] == "57":
            strT = "3"+strT[2:]
            lines[index] = strT
            verify += 1

        # 这里如果没有想要保持的就直接用空代替来写入lines中
        else:
            strT = ''
            lines[index] = strT
    
    # 判断文件是否需要删除并把序号放进删除列表中随后处理
    if verify == 0:
        deleteList.append(i)
    
    # 然后将读取模式关闭
    file.close()

    # lines列表转换为字符串放在strT中
    strT = "".join(lines)

    # 打开文件写入模式,把更新后的lines写进txt文件中
    file = open(fileName, 'w')
    file.write(strT)
    file.close()

#最后把需要删除的文件(没有所需要数字的txt文件)打印出来
print(deleteList)

        功能三 :删除没有目标数据的文件(需要前先运行功能二后输入print出来的结果)

# 第四步,删除无用txt
for num in deleteList:
    os.remove(path+'/'+str(num)+".txt")

最后可以为了好看在运行一次功能一的改名,至此目标实现

你可能感兴趣的:(python)