因为需要整理深度学习的数据集,需要手动改写一些txt数据集对应的初始项目
如图,我需要把71改成2 ; 把73删除 ; 把57改成3 ;改57成3且同时把2删除
因为有上千个这样的txt文件,所以假如手动修改的话需要很长时间
因此写一个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")
最后可以为了好看在运行一次功能一的改名,至此目标实现