在进行一些数据处理时,可能需要抓取原文中的一些内容,批量替换原文另外的一些内容,而且事先还需要一步搜索匹配的步骤。
举个例子,如下matlab输出的txt文件,原文件有几万行数据,这里只摘取3行对应的
文件文本大体分成2个大部分,一个是HMNAME COMP,一个是HMNAME PROP,
其中的中间部分有些是一样的,比如13100505_6063-T6_T380,13100505_6063-T6_T770等,
但是它们是散落在文本中的
所以想要的步骤是:
- 匹配中间部分
- 用HMNAME PROP行中的引号前的数字,替换掉相应的HMNAME COMP中的引号前的数字
- 完成
理想的替换之后:
因为源文件有上万条数据,所以只能用python工具自动化操作,不能手动啦
写的最终代码如下:
your_file_name = '111.txt' #文件路径
with open(your_file_name, 'r') as f:
file_data = f.read()
# 找到HMNAME COMP和HMNAME PROP的各行中具有相同引号里内容的行
hmname_comp_lines = []
hmname_prop_lines = []
for line in file_data.split('\n'): #hmname_comp和hmname_prop分成两个list,逐行判断分类,append进list中
if 'HMNAME COMP' in line:
hmname_comp_lines.append(line)
elif 'HMNAME PROP' in line:
hmname_prop_lines.append(line)
for comp_line in hmname_comp_lines:
for prop_line in hmname_prop_lines:
if comp_line.split('"')[1] == prop_line.split('"')[1]: #开始匹配判断中间字符是否一样
# 如果一样的话,用HMNAME PROP行中的引号前的数字替换掉相应的HMNAME COMP中的引号前的数字,是一个拼接的方法
new_comp_line = comp_line.split('"')[0].replace(comp_line.split('"')[0].split()[2],prop_line.split('"')[0].split()[2]) + '"' + prop_line.split('"')[1] + '"' + comp_line.split('"')[2]+ '"' +comp_line.split('"')[3]+ '"' +comp_line.split('"')[4]
print(new_comp_line)
# 遍历文档全盘替换
file_data = file_data.replace(comp_line, new_comp_line)
with open('your_file_name', 'w') as f:
f.write(file_data) #这里是直接写入原文件了,记得事先保存副本以免原文件数据丢失
希望对大家有所启发,记得点赞哦!