Как заменить совпадения регулярных выражений (одно за другим) в file2 на те же совпадения из аналогичного file1 в Python? - PullRequest
0 голосов
/ 23 мая 2019

Мне нужно скопировать совпадения с регулярным выражением из одного структурированного файла .txt и вставить его в другой аналогичный файл .txt, чтобы найденные совпадения с регулярным выражением из file_1 заменяли одинаковые совпадения в file_2, одно за другим, на совпадения file_1?

Примеры текстовых файлов со строками для замены:

#TXT file 1:

randomtext_randomtext_randomtext_randomtext_new_STRING_Arandomtext_
randomtext_randomtext_new_STRING_Brandomtext_randomtext_randomtext_
randomtext_randomtext_randomtext_randomtext_randomtext_randomtext_
new_STRING_Crandomtext_randomtext_randomtext_randomtext_

#TXT file 2 (the exact same structure, but a little different strings values):

randomtext_randomtext_randomtext_randomtext_old_STRING_Arandomtext_
randomtext_randomtext_old_STRING_Brandomtext_randomtext_randomtext
_randomtext_randomtext_randomtext_randomtext_randomtext_randomtext_
old_STRING_Crandomtext_randomtext_randomtext_randomtext_

Как мне скопировать найденные строки с помощью регулярных выражений: new_STRING_A, new_STRING_B и new_STRING_C из file_1.txt на месте file_2.txt для тех же совпадений регулярных выражений: old_STRING_A, old_STRING_B, old_STRING_C, чтобы новые строки заменяли старые из файла1 строки из файла_2?

Ответы [ 2 ]

0 голосов
/ 25 мая 2019

У меня есть что-то подобное, и оно не работает. Моя цель:

  1. Поиск строк в файле 1 с использованием Regex
  2. Поиск строк в файле 2 с использованием того же регулярного выражения
  3. Заменить найденные совпадения из файла 1 на найденные совпадения в файле 2

file1 = r'C:\Users\file_1.txt'
file2 = r'C:\Users\file_2.txt'


with open(file2) as f1 : 
 content = f1.readlines() 
 content = [x.strip() for x in content] 

with open(file1) as f2 : 
 content2 = f2.readlines() 
 content2 = [x.strip() for x in content] 

for line in content : 
 for line2 in content2 : 
     re.sub(r'[^]?old_STRING_A[^]?',r'[^]?new_STRING_A[^]?',line)

with open(file1, 'w') as f2:
   for line in content2 : 
     f2.write(line+'\n')


0 голосов
/ 23 мая 2019

Нет необходимости использовать регулярное выражение, достаточно только сравнения строк

with open('file_1.txt') as f1 : 
  content = f1.readlines() 
  content = [x.strip() for x in content] 

with open('file_2.txt') as f2 : 
  content2 = f2.readlines() 
  content2 = [x.strip() for x in content] 

for line in content : 
  for line2 in content2 : 
      if 'old_STRING_A' in line2 and 'old_STRING_A' in line1 :
       line2 = line1 
      elif 'old_STRING_B' in line2 and 'old_STRING_B' in line1 :
       line2 = line1 
      elif 'old_STRING_C' in line2 and 'old_STRING_C' in line1 :
       line2 = line1 

with open('file_2.txt', 'w') as f2:
    for line in content2 : 
      f2.write(line+'\n')

для использования регулярного выражения

import re 

with open('file_1.txt') as f1 : 
  content = f1.readlines() 
  content = [x.strip() for x in content] 

with open('file_2.txt') as f2 : 
  content2 = f2.readlines() 
  content2 = [x.strip() for x in content] 

for line in content : 
  for line2 in content2 : 
      re.sub(r'[^]?old_STRING_A[^]?','new_STRING_A',line)

with open('file_2.txt', 'w') as f2:
    for line in content2 : 
      f2.write(line+'\n')
...