Предполагается, что в вашем текущем рабочем каталоге file1.txt
содержит:
/home/picture/I10045.jpg
/home/picture/I10056.jpy
и file2.txt
содержит
Cat, Dog
Mouse, Mouse, Mouse
Также предполагается, что мы не заботимся опорядок элементов в каждой строке file2.txt
, так как он использует set
для удаления дубликатов.Если вам нужен такой порядок, я бы подумал об использовании цикла for
вместо понимания и создании списка вручную, проверяя членство с помощью in
или делая нетрадиционное использование OrderedDict
, есть еще некоторые подробности о том, как это сделать.вещи здесь: Удаление дубликатов в списках
#!/usr/bin/env python3
with open("file1.txt") as file1, open("file2.txt") as file2:
file1_lines = [line.strip("\n") for line in file1]
file2_lines = [set(line.strip("\n").split(", ")) for line in file2]
with open("file3.txt", "w") as file3:
for line1, line2 in zip(file1_lines, file2_lines):
print(line1, ", ".join(line2), file=file3)
Содержимое file3.txt
:
/home/picture/I10045.jpg Dog, Cat
/home/picture/I10056.jpy Mouse
Объяснение происходящего:
Мы открываем оба входных файла, используя with
, что обычно рекомендуется.
Мы запускаем понимание списка для открытого объекта file1
, который просто удаляет символы новой строки из каждой строки, это поможет, когда мы присоединяемся кстроки вместе позже.
Мы запускаем другое понимание списка над нашим открытым file2
объектом, который удаляет новые строки, а затем разбивает каждую строку на запятые в set
.Это удаляет все дубликаты и оставляет нам список наборов.
Мы открываем file3.txt
для записи и используем zip
, чтобы позволить нам перебирать оба списка, которые мы только что создали.мы используем join
, чтобы перестроить строки в file2.txt
с запятыми из наборов, которые находятся в file2_lines
.Нам не нужно делать ничего особенного в строках file1.txt
.
Мы используем print
с аргументом file=
для записи в наш файл ... Стоит отметить, что это file=
не будет работать в python2 без импорта print_function
из __future__
..если вы используете python2, вам, вероятно, следует просто использовать file3.write()
.