2015-12-26 4 views
1

У меня есть текстовый файл t1.txt:Сочетания линий из двух текстовых файлов

1¶ 
2¶ 
3 

У меня есть текстовый файл t2.txt:

»1¶ 
»2¶ 
»3 

Где » и представляют собой вкладку и символы новой строки соответственно.

Я хочу, чтобы объединить эти два и генерировать все возможные комбинации:

11¶ 
12¶ 
13¶ 
21¶ 
22¶ 
23¶ 
31¶ 
32¶ 
33¶ 

Вот мой код:

out = 'out.txt' 
in1 = 't1.txt' 
in2 = 't2.txt' 
outFile = open(out,'w') 
with open(in1, 'r') as f: 
    for line1 in f: 
     for line2 in open(in2, 'r'): 
      outFile.write(line1+line2) 
    outFile.close() 

Но выход я получаю:

1¶ 
»1¶ 
1¶ 
»2¶ 
1¶ 
»32¶ 
»1¶ 
2¶ 
»2¶ 
2¶ 
»33»1¶ 
3»2¶ 
3»3 

Я не понимаю, почему.
Может ли кто-нибудь помочь?

+0

Hi. Посмотрите здесь: [iterools] (https://docs.python.org/2/library/itertools.html) и выполните поиск комбинаций(). – rocksteady

+0

Вы знаете, что отступ неверен? – mic4ael

+0

Второй цикл 'for' вложен внутри первого, что означает, что он будет печатать каждую строку первого файла с каждой строкой второй, затем печатать вторую строку первого файла с каждой строкой второй и т. Д. – martineau

ответ

1

Есть пробелы и возвращает в файлах. Обрезать их с помощью полосы()

out = 'out.txt' 
    in1 = 't1.txt' 
    in2 = 't2.txt' 
    outFile = open(out,'w') 
    with open(in1, 'r') as f: 
     for line1 in f: 
      for line2 in open(in2, 'r'): 
       outFile.write(line1.strip()+line2.strip()+"\n") 
    outFile.close() 
+0

Большое вам спасибо! : D Это было быстро и просто .. :) – 418

2

Вы хотите product:

f1,f2 = "123","123" 
from itertools import product 

print(list(product(*(f1, f2)))) 

Так что для ваших файлов:

with open("a.txt") as f1, open("b.txt") as f2: 
    print(list(product(*(map(str.rstrip,f1), map(str.rstrip,f2))))) 

который даст вам:

[('1', '1'), ('1', '2'), ('1', '3'), ('2', '1'), ('2', '2'), ('2', '3'), ('3', '1'), ('3', '2'), ('3', '3')] 

И присоединиться:

print(list(map("".join, product(*(map(str.rstrip,f1), map(str.rstrip,f2)))))) 
['11', '12', '13', '21', '22', '23', '31', '32', '33'] 

Для записи в файл ::

with open("a.txt") as f1, open("b.txt") as f2, open("out.txt", "w") as out: 
    for p in product(*(map(str.rstrip,f1), map(str.rstrip, f2))): 
     out.write("".join(p) + "\n") 

Выход:

11 
12 
13 
21 
22 
23 
31 
32 
33 

Для использования python2 itertools.imap:

product(*(imap(str.rstrip,f1),imap(str.rstrip, f2)) 
+0

Как это сделать, если я беру данные из двух больших текстовых файлов? Я хочу комбинировать строки .. из двух файлов ... – 418

+0

@ 418, я отредактирую, но вы просто примените ту же логику к файлам –

+0

Большое вам спасибо за помощь !! :) – 418

1

Ваши строки содержат символ новой строки-символ и пробелы. Они не видны в конце строки.

Вы должны очистить эти символы:

out = 'out.txt' 
in1 = 't1.txt' 
in2 = 't2.txt' 
with open(in2, 'r') as f: 
    lines2 = [l.rstrip() for l in f] 
with open(out,'w') as outFile: 
    with open(in1, 'r') as f: 
     for line1 in f: 
      line1 = line1.rstrip() 
      for line2 in lines2: 
       outFile.write(line1+line2+'\n') 
Смежные вопросы