在进行一些数据处理时,可能需要抓取原文中的一些内容,批量替换原文另外的一些内容,而且事先还需要一步搜索匹配的步骤。
举个例子,如下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各行分成两个list
hmname_comp_lines = []
hmname_prop_lines = []
for line in file_data.split('\n'): #逐行判断分类,append进list中if 'HMNAME COMP' in line:hmname_comp_lines.append(line)elif 'HMNAME PROP' in line:hmname_prop_lines.append(line) # 找到HMNAME COMP和HMNAME PROP的各行中具有相同引号里内容的行
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) #这里是直接写入原文件了,记得事先保存副本以免原文件数据丢失
希望对大家有所启发,记得点赞哦!