2015-06-24 3 views
-3

Im действительно новый для программирования и до сих пор не нашел удовлетворительного ответа. Я использую python, и я хочу объединить три текстовых файла, чтобы получить все возможные комбинации слов. У меня есть 3 файла:Merge 3 Textfiles with python

Первый файл:

line1 
line2 
line3 

Второй файл (префикс):

pretext1 
pretext2 
pretext3 

Третий файл (суффикс):

suftext1 
suftext2 
suftext3 

Я уже использовал .read(), и мои переменные содержат список для каждого текстового файла. Теперь я хочу, чтобы написать функцию, чтобы объединить эти 3 файла в 1, и она должна выглядеть следующим образом:

выходной_файл:

pretext1 line1 suftext1 #this is ONE line(str) 
pretext2 line1 suftext1 
pretext3 line1 suftext1 
pretext1 line1 suftext2 
pretext1 line1 suftext3 

и так далее, вы получите представление

Я хочу, чтобы все это возможно комбинации в 1 текстовом файле в качестве вывода. Думаю, мне нужно использовать цикл в цикле ?!

+0

Возможно, мне что-то не хватает, но метод, с помощью которого ваши строки должны быть объединены, кажется мне неочевидным. – alexwlchan

+0

Привет! Я просто хочу создать все возможные комбинации этих трехсловных файлов. Я попытался поиграть с itertools, но не смог заставить его работать. В основном мне нужно сделать следующее: выбрать 1-й элемент/слово списка1 и добавить 1-й элемент/слово списка 2 + добавить 1-й элемент/слово списка 3. Затем перейти к следующему элементу и т. Д. –

+0

'itertools.product 'делает именно это. –

ответ

2

Вот он, если у меня есть вопрос правильно. Сначала вам нужно сосредоточиться в правильной папке с пакетом os.

import os 
os.chdir("The_path_of_the_folder_containing_the_files") 

Затем открыть вам три файла, и поместить слова в списках:

file_1 = open("file_1.txt") 
file_1 = file_1.read() 
file_1 = file_1.split("\n") 

file_2 = open("file_2.txt") 
file_2 = file_2.read() 
file_2 = file_2.split("\n") 

file_3 = open("file_3.txt") 
file_3 = file_3.read() 
file_3 = file_3.split("\n") 

Вы создаете текст, который вы хотите в выходном файле с петлями:

text_output = "" 
for i in range(len(file_2)): 
    for j in range(len(file_1)): 
     for k in range(len(file_3)): 
      text_output += file_2[i] + " " + file_1[j] + " " + file_3 [k] + "\n" 

И введите этот текст в ваш выходной файл (если этот файл не существует, он будет создан).

file_output = open("file_output.txt","w") 
file_output.write(text_output) 
file_output.close() 
+0

ваши итерации будут выводить все возможные комбинации только для строк 'file_1' – PYPL

+0

Я не получаю ваш комментарий PYPL, я получаю на своем выходе все 27 возможных комбинаций из трех строк каждого входного файла. Разве это не цель? – ysearka

+0

@Regis попросил все возможные комбинации для всех файлов, поэтому он должен быть в общей сложности 27 * 3 отпечатанных комбинаций, но вы получаете результат только для 1 файла – PYPL

0

Хотя существующий ответ может быть правильным, я думаю, что это случай, когда приведение в действие функции библиотеки - это, безусловно, путь.

import itertools 

with open('lines.txt') as line_file, open('pretext.txt') as prefix_file, open('suftext.txt') as suffix_file: 
    lines = [l.strip() for l in line_file.readlines()] 
    prefixes = [p.strip() for p in prefix_file.readlines()] 
    suffixes = [s.strip() for s in suffix_file.readlines()] 

    combos = [('%s %s %s' % (x[1], x[0], x[2])) 
       for x in itertools.product(lines, prefixes, suffixes)] 

    for c in combos: 
     print c