2013-06-25 3 views
-4

Как я могу достичь этого с помощью python?Входные и выходные файлы python

для разработки кода, который будет принимать два входных файлов, как файлы состоят из лексически отсортированы в том же порядке ASCII строк, и будет производить два выходных файла - первый выходной файл должен содержать только строки, которые были найдены в первом входном файле, но не во втором; второй выходной файл - строки, найденные во втором входном файле, но не в первом.

+0

Похоже, работа для 'comm' ... –

+6

I t похоже, что вы хотите, чтобы мы написали вам код. Хотя многие пользователи готовы создавать код для кодера, терпящего бедствие, они обычно помогают только тогда, когда плакат уже попытался решить проблему самостоятельно. Хорошим способом продемонстрировать это усилие является включение кода, который вы написали до сих пор, пример ввода (если он есть), ожидаемый вывод и вывод, который вы фактически получаете (вывод консоли, трассировки стека, ошибки компилятора - все, что угодно применимо). Чем больше деталей вы предоставляете, тем больше ответов вы получите. –

+0

@MartijnPieters, вдохновленный «Войной за закрытие»? Полностью согласен. – J0HN

ответ

2

Псевдо Код:

open both input files and both output files, 
read a line from each input files into a & b, 
while len(a) > 0 or len(b) > 0: 
if both are the same output to samefile and read next line from both files, 
if a > b: 
    output b to diff file 
    read next b 
else: # a < b 
    output a to diff file 
    read next a 
close all the files 

Кодирование остается в ОП.

-1

Не делая слишком большой для вас дизайн (люди здесь не собираются решать проблемы для вас), я бы сказал, что словарь - хороший вариант здесь. Ключом может быть слово и запись, из каких файлов он был прочитан. Словарь затем позволяет легко определить, какие слова были обнаружены только в одном из файлов

1

Вы можете использовать набор операций

##file1.txt 
##----------------- 
##a new thing 
##this is data 
##and more data 

##file2.txt 
##-------------- 
##another new thing 
##this is data 
##and more data 

infile1 = open('file1.txt', 'r') 
infile2 = open('file2.txt', 'r') 

file1_lines = infile1.readlines() 
file2_lines = infile2.readlines() 

out_lines_1 = set(file1_lines) - set(file2_lines) 
out_lines_2 = set(file2_lines) - set(file1_lines) 

outfile1 = open('outfile1.txt', 'w') 
outfile2 = open('outfile2.txt', 'w') 

outfile1.writelines(out_lines_1) 
outfile2.writelines(out_lines_2) 

infile1.close() 
infile2.close() 
outfile1.close() 
outfile2.close() 
+0

Хотя этот ответ, вероятно, технически корректен, его автор делает всю работу для OP, поощряя такие плохие вопросы. –

0

Это работает:

from collections import Counter 
with open(fn1,'r') as f1: 
    c1=Counter(e.strip() for e in f1) 

with open(fn2,'r') as f2: 
    c2=Counter(e.strip() for e in f2) 

col1=c1-c2 
col2=c2-c1 
col3=c1 & c2 
print 'Only in first file:',','.join(sorted(col1.elements())) 
print 'Only in second file:',','.join(sorted(col2.elements())) 
print 'In both files:',','.join(sorted(col3.elements())) 

Если взять два примера файлы из Wikipedia's entry on comm он печатает:

Only in first file: eggplant 
Only in second file: banana,zucchini 
In both files: apple,banana 
+0

Хотя этот ответ, вероятно, технически корректен, его автор делает всю работу для ОП, поощряя такие плохие вопросы. –

Смежные вопросы