Как объединить строки одного текстового файла в Python? - PullRequest
0 голосов
/ 19 октября 2011

Я искал, но не нашел ничего, чтобы помочь .. Это пример:

    List.txt
    a
    b
    c
    d

Я хочу иметь возможность получить такой вывод:

Ответы [ 4 ]

2 голосов
/ 19 октября 2011

Довольно просто ...

from itertools import permutations

with open('List.txt') as f:    
    letters = (l.strip() for l in f if l.strip())    
    for p in permutations(letters, 2):
        print ''.join(p)

Выход:

ab
ac
ad
ba
bc
bd
ca
cb
cd
da
db
dc

Некоторые заметки:

Оператор with гарантирует, что файл будет закрыт, когда вы закончите с ним.

letters - это генераторное выражение, которое во многих случаях (но не в этом) избавит вас от необходимости читать весь файл сразу.

Использование l.strip() предназначено для удобной обработки случайных пустых строк, если они присутствуют на входе.

itertools.permutations правильно, НЕ itertools.combinations, который учитывает ab == ba и не будет включать последнее в качестве вывода.

Счастливого питона:)

0 голосов
/ 19 октября 2011
f = open("List.txt")
lines = f.read().splitlines()
lines_new = []
for line in lines:
    for line2 in lines:
        if not line == line2:
            lines_new.append("%s%s" % (line, line2))

print lines_new # ['ab', 'ac', 'ad', 'ba', 'bc', 'bd', 'ca', 'cb', 'cd', 'da', 'db', 'dc']
open("Output.txt", "w").write("\n".join(lines_new))

В результате получается файл с именем Output.txt с:

ab
ac
ad
ba
bc
bd
ca
cb
cd
da
db
dc
0 голосов
/ 19 октября 2011

Модуль itertools имеет комбинаторные функции, помогающие справиться с подобными проблемами:

>>> from itertools import combinations, permutations, product
>>> s = open('list.txt').read().splitlines()
>>> for t in permutations(s, 2):
        print ''.join(t)
0 голосов
/ 19 октября 2011

Сначала вы можете прочитать файл в массив:

lines=[]
for line in file:
  lines.append(line)

, а затем переберите его, чтобы получить желаемый результат.

for line1 in lines:
  for line2 in lines:
    print line1+line2

или распечатайте его в файл.

...