1.代码
import os
import re
# 路径
path = 'D:/BaiduNetdiskDownload/开源样本/Updated_Classes.v1i.yolov8/valid/labels/'
# 文件列表
files = []
for file in os.listdir(path):
if file.endswith(".txt"):
files.append(path+file)
# 逐文件读取-修改-重写
for file in files:
with open(file, 'r') as f:
new_data = re.sub('^1', '0', f.read(), flags=re.MULTILINE) # 将列中的1替换为0
with open(file, 'w') as f:
f.write(new_data)
2.主要代码含义:
new_data = re.sub('^1', '0', f.read(), flags=re.MULTILINE) # 将列中的1替换为0
- re 是 Python 中的正则表达式模块。
- re.sub() 是 re 模块中的一个函数,用于在字符串中执行正则表达式替换。
- ^1 是一个正则表达式模式,表示以字符 1 开头。
- ‘0’ 是替换的目标字符串,表示将匹配到的部分替换为字符 0。
- f.read() 是一个文件对象(f)的读取操作,它会将文件内容作为字符串返回。
- flags=re.MULTILINE 是一个可选参数,用于指定正则表达式的标志。在这个例子中,re.MULTILINE 标志表示多行模式,使得 ^ 元字符匹配每行的开头,而不仅仅是字符串的开头。
整个表达式的含义是,从文件对象 f 读取内容作为字符串,并对该字符串执行正则表达式替换操作,将以字符 1 开头的部分替换为字符 0。替换的结果被赋值给变量 new_data。
3.用法说明:
例如需要将已标注过的类别0、1标签互换,则先将1替换成2:
new_data = re.sub('^1', '2', f.read(), flags=re.MULTILINE) #换掉上面对应代码
再将类别0替换成1:
new_data = re.sub('^0', '1', f.read(), flags=re.MULTILINE) #换掉上面对应代码
最后将2替换成0:
new_data = re.sub('^2', '0', f.read(), flags=re.MULTILINE) #换掉上面对应代码
也就是说改3次代码,执行三次,对应类别标签替换完成。