Я пытаюсь сделать простую программу счетчика слов в Python 3.4.1, где пользователь должен ввести список разделенных запятыми слов, которые затем анализируются на частоту в образце текстового файла.Как искать текстовый файл для списка слов из пользовательского ввода?
Я в настоящее время зациклился на том, как искать введенный список слов в текстовом файле.
Сначала я попробовал:
file = input("What file would you like to open? ")
f = open(file, 'r')
search = input("Enter the words you want to search for (separate with commas): ").lower().split(",")
search = [x.strip(' ') for x in search]
count = {}
for word in search:
count[word] = count.get(word,0)+1
for word in sorted(count):
print(word, count[word])
В результате:
What file would you like to open? twelve_days_of_fast_food.txt
Enter the words you want to search for (separate with commas): first, rings, the
first 1
rings 1
the 1
Если что-нибудь, чтобы пройти, я предполагаю, что этот метод только дал мне количество слов на входе а не счет входного списка слов в текстовом файле. Поэтому я пробовал:
file = input("What file would you like to open? ")
f = open(file, 'r')
lines = f.readlines()
line = f.readline()
word = line.split()
search = input("Enter the words you want to search for (separate with commas): ").lower().split(",")
search = [x.strip(' ') for x in search]
count = {}
for word in lines:
if word in search:
count[word] = count.get(word,0)+1
for word in sorted(count):
print(word, count[word])
Это не дало мне ничего назад. Вот что произошло:
What file would you like to open? twelve_days_of_fast_food.txt
Enter the words you want to search for (separate with commas): first, the, rings
>>>
Что я делаю неправильно? Как я могу исправить эту проблему?
Как об использовании [collections.Counter] (https://docs.python.org/2/library/collections.html#collections.Counter) на file_.readlines(). split (',')? Hmm nope, все равно нужно будет повторять каждую строку. Но возможно collection.Counter (file_.read()) пригодится? – brainovergrow
@brainovergrow: 'collections.Counter()' является прекрасным дополнением, но требует импорта, а также будет толкать границы тех методов, которые OP уже знает. –
@brainovergrow: 'collections.Counter (f.read(). Lower(). Split())' будет делать, а затем искать подсчеты для каждого условия поиска в этом. Но сначала фильтрация на поисковых терминах - прекрасный подход, поскольку это занимает меньше памяти. –