Sed с питоном и многими параметрами - PullRequest
0 голосов
/ 25 февраля 2019

У меня большой файл с несколькими строками, такими как:

Users.txt

  • Пользователь1: jhonny
  • Пользователь2: Мэри
  • Пользователь3: Джейн

И еще один файл с:

Data.txt

  • Пользователь1: Коричневый
  • Пользователь3: Желтый
  • Пользователь2: Зеленый

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

Final.txt

  • Джонни: Браун
  • Джейн: Желтый
  • Мэри: Зеленый

Я сделал следующий код в python.

with open("File", "r") as sources:
    lines = sources.readlines()
with open("File", "w") as sources:
    for line in lines:
        sources.write(re.sub(r'TextToReplace', 'ParameterToReplace', line))

Мне нужно заменить TextToReplace на первое поле в файле Users.txt, а ParameterToReplace - это второе поле в Users..текст.Много раз с параметрами 30M +.

Это похоже на команду sed 's/TextToReplace/ParameterToReplace/" File

  • TextToReplace = Старый текст, подлежащий замене.
  • ParameterToReplace = Новый текст.

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

Команда join полезна для такого рода вещей.Предполагая, что ваша оболочка понимает Замены процесса :

$ join -o 1.2,2.2 -t: <(sort users.txt) <(sort data.txt)
jhonny:Brown
Mary:Green
Jane:Yellow
0 голосов
/ 25 февраля 2019

вы можете использовать dict, если данные смешались:

userdict={}
for i in open("users.txt","r").read().split("\n"):
    arr=i.split(":")
    userdict[arr[0]]=arr[1]
with open("final.txt","w") as f:
    for i in open("data.txt","r").read().split("\n"):
        arr=i.split(":")
        f.write("{}:{}".format(userdict[arr[0]],arr[1]))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...