Чтение в двух файлах и запись в третий файл с объединенными строками - PullRequest
0 голосов
/ 09 марта 2019

Учитывая два текстовых файла, каждая строка показывает абсолютный путь каждого изображения.

Первые две строки первого текстового файла читаются

/home/picture/I10045.jpg
/home/picture/I10056.jpy

Первые две строки второготекстовый файл читает

Cat, Dog
Mouse, Mouse, Mouse

Как получается, что вы читаете в двух отдельных файлах и удаляете дубликаты второго файла.Затем объедините их вместе, чтобы создать третий файл.

Вывод в третьем текстовом файле должен выглядеть так:

/home/picture/I10045.jpg Cat, Dog
/home/picture/I10056.jpg Mouse

Ответы [ 3 ]

2 голосов
/ 09 марта 2019

Предполагается, что в вашем текущем рабочем каталоге 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().

0 голосов
/ 09 марта 2019
i=0
with open('file3.txt', 'w') as outfile:
    with open('file1.txt', 'r') as file1, open('file2.txt', 'r') as file2:
        file2lines = file2.readlines()
        for line in file1 :
            outfile.write(line.replace('\n', '').strip() + ' ' + str(set(file2lines[i].replace('\n', '').replace(', ', ',').split(','))) + '\n')
            i=i+1

Открывает оба файла, затем использует файл1 в качестве основного цикла for.Большая часть кода - это очистка текста (удаление пробелов, новых строк и т. Д.), А затем я использовал split для преобразования животных в список, а затем использовал set для удаления дубликатов.Затем я преобразовал его обратно в строку.

0 голосов
/ 09 марта 2019
#Function to remove the duplicates
def remove_dup(s):
    temp_s = s.split(',')       # Thinking that the second file only has the tags
    check = {}
    for i in temp_s:
        if i in check:
            check[i]+=1
        else:
            check[i]=1

    # Constructing the string
    return_string = ""
    for i in range(0,len(temp_s)):
        if check[temp_s[i]]==1 and i==0:
            return_string = return_string+temp_s[i]
        elif check[temp_s[i]]==1:
            return_string = return_string+", "+temp_s[i]

    return return_string

#Reading in the files
file1 = open('test1.txt','r')
text1 = [i.rstrip() for i in file1]

file2 = open('test2.txt','r')
dup_text2 = [i.rstrip() for i in file2]

# Removing duplicates
text2 = [remove_dup(i) for i in dup_text2]

# Adding the content
text3 = [text1[i]+" "+text2[i] for i in range(0,len(text1))]

# Writing to the file
with open('test3.txt','w') as f:
    for line in text3:
        f.write("%s\n" % line)

Надеюсь, это поможет

...