Трудность перебора словаря для поиска .txt для значений в словаре - PullRequest
0 голосов
/ 18 апреля 2019

Цель моего кода - преобразовать электронную таблицу Excel в словарь + использовать этот словарь для поиска строки в файле .txt + распечатать счетчик количества раз, которое каждая строка использовалась в тексте.У меня проблемы с итерацией в словаре и подсчетом всех значений словаря.

Я пытался перечислять и перебирать значения, используя циклы for, но все равно получаю счет "Карла "только вместо того, чтобы считать все элементы Словаря.

Dict = {}
for row in range(1, dictionary.max_row+1):
    for col in range(1, 2):
         cell_value = dictionary.cell(row=row, column=col).value
         Dict[cell_value] = dictionary.cell(row=row, column=1).value

def searchtxt():
     count = 0
     with open('26440384.txt', 'r') as f:
        for key in Dict.values():
            print(key)
            for line in f:
                count += line.count(str(key))
                print(count)
                count = 0
searchtxt()

ВОЗВРАТЫ:

Carla
6
God
radiation

Я получаю код для распечатки всех элементов словаря, но он только подсчитывает количество раз, когда "Carla" присутствует в тексте.Я хочу, чтобы код возвращал это:

Carla
6
God
4
radiation
3

с / п Правки Клааса :

def searchtxt():
    count = 0
    with open('26440384.txt', 'r') as f:
        for key in Dict.values():
            print(key)
            lineList = [line.rstrip('\n') for line in open('26440384.txt', 'r')]
            for key in lineList:
                count += lineList.count(str(key))
                print(count)
            count = 0
searchtxt()

ВОЗВРАТЫ:

Carla
1
God
1
radiation
1

РЕШЕНИЕ:

def searchtxt():
    count = 0
    with open('26440384.txt', 'r') as f:
        for key in Dict.values():
            print(key)
            for line in f:
                count += line.count(str(key))
                print(count)
                count = 0
            f.seek(0)
searchtxt()

1 Ответ

0 голосов
/ 18 апреля 2019

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

for line in f:
            count += line.count(str(key))
            print(count)
            count = 0

, в строке больше нет строк.файл для чтения, как вы уже в конце.Если файл не слишком большой (или вы не беспокоитесь о памяти), я сначала прочитал бы файл в список, а затем перебрал бы этот список

lineList = [line. rstrip('\n') for line in open(fileName)]

Так, а не для строки в васбудет идти для строки в lineList: и т. д.

...