代码实现功能:
批量修改txt文档
1、将txt文件名修改成从1升序
2、修改txt文档内容
原标签有0和1两类,想要删除其中的1类,保留0类
若标签中无0类标签,即只有1类标签时,直接删除该文档
'''
批量修改txt文档
1、将txt文件名修改成从1升序
2、修改txt文档内容
'''
import os
# 定义path变量,存放需要修改的txt文件的文件夹
path = 'E:\XiDing\group4\yolov5-5.0\own_data\labels\\val'
# 系统列出所有path文件夹里面文件名称(此操作不会有序遍历所有文件,需要下一条代码排序)
total_txt = os.listdir(path)
# 通过文件名格式前的数字大小按升序排
#total_txt.sort(key=lambda x: int(x.split('_')[0]))
''' 修改txt文件名'''
i = 0
'''
for file in total_txt:
oldfile = path + '/' + str(file)
newfile = path + '/' + str(i)+ '.txt'
os.rename(oldfile,newfile)
'''
''' 批量修改txt文档中的内容 '''
deletelist = []
# 遍历前面读取的已经修改的有序文件
for file in total_txt:
i += 1
FileName = path + '/' + file
verify = 0 #verify用来决定文件是否删除
# 部分文件存在乱码现象,无法读取,报错为UnicodeDecodeError,将这部分文件删除
try:
f = open(FileName,'r',encoding='utf-8') #打开文件阅读模式
contents = f.readlines() # 返回列表形式的内容
print(FileName)
except UnicodeDecodeError as e:
deletelist.append(file)
# 以行为单位遍历文件内容,index是行数,line是单行内容
for index,line in enumerate(contents):
line_content = contents[index] #读取当前行的内容
if line_content[0:1] =='1' : # 切片判断前两个字符,要保留类型为0的标签,删除类型为1的标签
line_content = ''
contents[index] = line_content
else:
verify += 1
# 判断文件是否需要删除并把序号放进删除列表中随后处理
if verify == 0: # verify为0,将该txt文件放入deletelist留待删除
deletelist.append(file)
f.close()
#contents列表转换为字符串放在line_content中
line_content = ''.join(contents)
# 打开文件写入模式,把更新后的contents写进txt文件中
file = open(FileName,'w')
file.write(line_content)
file.close()
# 删除delelist中的文件
for num in deletelist:
os.remove(path+'/'+str(num))