Найдите совпадение и добавьте столбец

#python #regex #data-processing

Вопрос:

Я хочу выполнить эту конкретную задачу, у меня есть 2 файла, первый с электронными письмами и учетными данными:

 xavier.desprez@william.com:Xavier xavier.locqueneux@william.com:vocojydu xaviere.chevry@pepe.com:voluzigy Xavier.Therin@william.com:Pussycat5 xiomara.rivera@william.com:xrhj1971 xiomara.rivera@william-honduras.william.com:xrhj1971  

и второй, с электронной почтой и местоположением:

 xavier.desprez@william.com:BOSNIA xaviere.chevry@pepe.com:ROMANIA  

Я хочу, чтобы всякий раз, когда электронное письмо из первого файла будет найдено во втором файле , строка заменялась на адрес электронной почты:УЧЕТНЫЕ ДАННЫЕ:МЕСТОПОЛОЖЕНИЕ, а когда оно не найдено, оно заканчивается: ЭЛЕКТРОННАЯ ПОЧТА:УЧЕТНЫЕ ДАННЫЕ:ПУСТО

поэтому окончательный файл должен быть таким:

 xavier.desprez@william.com:Xavier:BOSNIA xavier.locqueneux@william.com:vocojydu:BLANK xaviere.chevry@pepe.com:voluzigy:ROMANIA Xavier.Therin@william.com:Pussycat5:BLANK xiomara.rivera@william.com:xrhj1971:BLANK xiomara.rivera@william-honduras.william.com:xrhj1971:BLANK  

Я сделал несколько попыток на python, но писать его даже не стоит, потому что я не очень близок к решению.

С уважением !

Редактировать:

Это то, что я пытался:

 import os import sys   with open("test.txt", "r") as a_file:   for line_a in a_file:   stripped_email_a = line_a.strip().split(':')[0]    with open("location.txt", "r") as b_file:    for line_b in b_file:   stripped_email_b = line_b.strip().split(':')[0]  location = line_b.strip().split(':')[1]   if stripped_email_a == stripped_email_b:  a = line_a   ":"   location  print(a.replace("n",""))  else:  b = line_a   ":BLANK"  print (b.replace("n",""))   

Вот какой результат я получаю:

 xavier.desprez@william.com:Xavier:BOSNIA xavier.desprez@william.com:Xavier:BLANK xaviere.chevry@pepe.com:voluzigy:BLANK xaviere.chevry@pepe.com:voluzigy:ROMANIA xavier.locqueneux@william.com:vocojydu:BLANK xavier.locqueneux@william.com:vocojydu:BLANK Xavier.Therin@william.com:Pussycat5:BLANK Xavier.Therin@william.com:Pussycat5:BLANK xiomara.rivera@william.com:xrhj1971:BLANK xiomara.rivera@william.com:xrhj1971:BLANK xiomara.rivera@william-honduras.william.com:xrhj1971:BLANK xiomara.rivera@william-honduras.william.com:xrhj1971:BLANK  

Я очень близок, но получаю дубликаты 😉

С уважением

Комментарии:

1. Я отредактировал свой вопрос, вот что я попытался

Ответ №1:

Проблема дублирования возникает из-за того, что вы читаете два файла вложенным способом, как только строка из test.txt них прочитана, вы открываете location.txt файл для чтения и обрабатываете его. Затем вы читаете вторую строку test.txt , снова открываете location.txt и обрабатываете ее снова.

Вместо этого возьмите все необходимые данные location.txt , скажем , из словаря, а затем используйте их при чтении test.txt :

 email_loc_dict = {} with open("location.txt", "r") as b_file:  for line_b in b_file:  splits = line_b.strip().split(':')  email_loc_dict[splits[0]] = splits[1]  with open("test.txt", "r") as a_file:  for line_a in a_file:  line_a = line_a.strip()  stripped_email_a = line_a.split(':')[0]  if stripped_email_a in email_loc_dict:  a = line_a   ":"   email_loc_dict[stripped_email_a]  print(a)  else:  b = line_a   ":BLANK"  print(b)  

Выход:

 xavier.desprez@william.com:Xavier:BOSNIA xavier.locqueneux@william.com:vocojydu:BLANK xaviere.chevry@pepe.com:voluzigy:ROMANIA Xavier.Therin@william.com:Pussycat5:BLANK xiomara.rivera@william.com:xrhj1971:BLANK xiomara.rivera@william-honduras.william.com:xrhj1971:BLANK