Как мне настроить oop на файлы по отдельности? - PullRequest
0 голосов
/ 01 февраля 2020

Эта часть кода складывается каждый раз, когда слово присутствует во всех моих файлах .txt:

def wordcounts():
word_frequencies = dict()
totaal = dict()
for bestand in glob.glob('*.txt'):
    word_list = clean_text(bestand)
    for i in word_list:
        if i in word_frequencies:
            word_frequencies[i] += 1
        else:
            word_frequencies[i] = 1
totaal[bestand] = word_frequencies
return totaal

Вывод:

{'test3.txt': {'aap': 4, 'mies': 4, 'wim': 1, 'noot': 2}}

Вывод, который мне нужен:

{'test1.txt': {'aap': 1, 'noot': 1, 'mies': 1}, 'test2.txt': {'aap': 1, 'noot': 1}, 'test3.txt': {'aap': 1, 'mies': 2}, 'test4.txt': {'aap': 1, 'mies': 1, 'wim': 1}}

Кто-нибудь знает, что мне нужно сделать, чтобы убедиться, что он делает это для каждого отдельного файла?

(clean_text () - это функция, которую я сделал для обработки файлов .txt )

Ответы [ 2 ]

0 голосов
/ 01 февраля 2020

В вашем коде у вас есть словарь результатов (totaal), который находится за пределами для l oop

def wordcounts():
    word_frequencies = dict()
    totaal = dict()
    for bestand in glob.glob('*.txt'):
        word_list = clean_text(bestand)
        for i in word_list:
            if i in word_frequencies:
                word_frequencies[i] += 1
            else:
                word_frequencies[i] = 1
    totaal[bestand] = word_frequencies
    return totaal

Итак, вы загружаете totaal одним ключом (последний бент) и загрузив его со всеми word_frequencies.

Если вы сделаете отступ для итоговой строки, которая будет включена в for для l oop, он заполнит словарь ключом для каждой бестенд, как вы и ожидали.

Вы также захотите переместить word_frequencies в l oop, чтобы вы могли получить частоты только для каждого бенд:

def wordcounts():
    totaal = dict()
    for bestand in glob.glob('*.txt'):
        # MOVED WORD_FREQUENCIES HERE
        word_frequencies = dict()
        word_list = clean_text(bestand)
        for i in word_list:
            if i in word_frequencies:
                word_frequencies[i] += 1
            else: 
                word_frequencies[i] = 1
         # NOTE THAT THIS IS NOW PROPERLY INDENTED
         totaal[bestand] = word_frequencies
    return totaal
0 голосов
/ 01 февраля 2020

Я полагаю, что вы пропустили только отступ, попробуйте это:

def wordcounts():
word_frequencies = dict()
totaal = dict()
for bestand in glob.glob('*.txt'):
    word_list = clean_text(bestand)
    for i in word_list:
        if i in word_frequencies:
            word_frequencies[i] += 1
        else:
            word_frequencies[i] = 1
    totaal[bestand] = word_frequencies  # < Added an indent here
return totaal
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...