2013-09-07 4 views
-2

Я хочу, чтобы программа, которая открывает два файла A.txt и B.txt, в файле A есть такие предложения, как: три литра молока, в файле B есть значение для слов, таких как три 2, л 3, 1, молоко 4 я хочу, чтобы открыть первый файл и проверьте слово значения и добавить эти значения и напечатать, если значение добавить взлеты до 5. до сих пор я сделал так:открытие 2 файлов и добавление значений python

count=0 
with open('shopping.txt') as s: 
    with open('syllables.txt') as f: 
     words = {} 
     syllables = {} 
     for line in f: 
     word, syla = line.split() 
     words[word] = syla 
     syllables[syla] = word 
    for lines in s: 
     lines=lines.strip() 
     lines=lines.split() 
     for i in lines: 
     lines=words[i] 
     print(lines) 

Я получаю значения слов, но 1 значение в одной строке, а другое в следующих строках.

Файл А содержит:

three litres of milk 
colour fast shampoo 

Файл B содержит:

sam 2 
apple 3 
three 2 
litres 1 
of 1 
milk 1 
colour 3 
fast 1 
shampoo 4 

Я хочу, чтобы напечатать строку, значение которой составляет 5, как и здесь первая линия составляет 5

+0

Исправьте отступов, некоторые строки с отступом 4 пробела, другие 1 или 2 ... –

+0

является его ОКЕЙ сейчас? –

+0

Пожалуйста, опубликуйте ожидаемый вывод и содержимое файлаA, fileB в соответствующем формате. –

ответ

1
with open('A.txt') as f1, open('B.txt') as f2: 
    #create a dict from fileB and don't forget to convert the count to an integer 
    dic = {word : int(val) for word, val in (line.split() for line in f2)} 
    #now iterate over each line in fileA 
    for line in f1: 
     words = line.split() 
     #get the count using `sum()` 
     #dict.get would return 0 if key is not found in dic 
     count = sum(dic.get(word, 0) for word in words) 
     if count == 5: 
     print (line, end='') #or `print (line.strip())` 

мощность:

three litres of milk 

Примечания:

1. str.split() заботится о белых пространствах, поэтому нет необходимости в str.strip().

2. В py3.x и py2.7 + нет необходимости встраивать операторы with.

выше ДИКТ постижение примерно эквивалентно:

dic = {} 
for line in f2: 
    word, val = line.split() 
    dic[word] = int(val) 
+0

Большое спасибо. Теперь я понял, как суммировать значения :) –

+0

, но я не понял Dic {}, который вы использовали. как ты это сделал и что он делает? как i m very begginer :) –

+0

@HasnainAli 'dic' содержит количество элементов, взятых из' fileB', тогда этот 'dic' используется, чтобы найти общий счет на каждой строке файлаA. –

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