python进行批量搜索匹配替换文本文字的matlab操作实例

在进行一些数据处理时,可能需要抓取原文中的一些内容,批量替换原文另外的一些内容,而且事先还需要一步搜索匹配的步骤。

举个例子,如下matlab输出的txt文件,原文件有几万行数据,这里只摘取3行对应的
文件文本大体分成2个大部分,一个是HMNAME COMP,一个是HMNAME PROP,
其中的中间部分有些是一样的,比如13100505_6063-T6_T380,13100505_6063-T6_T770等,
但是它们是散落在文本中的

所以想要的步骤是:

  1. 匹配中间部分
  2. 用HMNAME PROP行中的引号前的数字,替换掉相应的HMNAME COMP中的引号前的数字
  3. 完成
    python进行批量搜索匹配替换文本文字的matlab操作实例_第1张图片
    理想的替换之后:
    python进行批量搜索匹配替换文本文字的matlab操作实例_第2张图片
    因为源文件有上万条数据,所以只能用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)         #这里是直接写入原文件了,记得事先保存副本以免原文件数据丢失

希望对大家有所启发,记得点赞哦!

你可能感兴趣的:(python,matlab,开发语言)