Функция, которая загрузит текстовый файл и ее результатом будет словарь
Функция, которая загрузит текстовый файл и ее результатом будет словарь, содержащий все слова и числа фигурирующие в тексте с указанием количества их появлений. Слова они состоят из букв английского алфавита (верхнего и нижнего регистра) и могут быть разделены не только пробелами, но и другими небуквенными символами. Буквы не чувствительны к регистру(«Аnnа», «АNNА», - одно и то же слово). Числа состоят из цифр, которым может предшествовать знак минус ('-') и могут содержать десятичную точку. Параметры вызова функции должны быть: имя (вместе с путем) файл и кодовую таблицу, которая использовалась для сохранения файла. Если в файле нет слов или цифр, то полученный словарь будет пустым. Результатом функции для файла с текстом “Anna, ANNA, 45.65, 77d54, 77” , будет: {‘Anna’ :1, 45.65 : 1, **77:2, ‘d’:1, 54:1} Как указать, что буквы нечувствительны к регистру?
Это то, что я сумела написать. Может кто-то подсказать, какие здесь ошибки и почему он не работает?
plik= open('plik.txt','r')
tekst = plik.readlines()
n = tekst.sort()
for x in n:
if tekst.count(x)>1 :
dict('x', n.keys)
n.keys= tekst.count()
elif tekst.count(x)=0:
print({})
Ответы (1 шт):
Для разделения текста по "небуквенным разделителям" можно использовать метод re.split(pattern, string) из модуля re:
def count_words_in_file(filename:str)->dict:
try:
f = open(filename, 'rt')
except Exception:
f.close()
return {}
import re
text_words = re.split(r'[^A-Za-z]', f.read())
result = {}
for word in text_words:
if word:
if word.lower() in result:
result[word.lower()] += 1
else:
result.update({word.lower():1})
f.close()
return result
from pprint import pprint
pprint(count_words_in_file('text.txt'))
Текстовый файл:
hello, my sweet world!
U r SO SWEET!!!Are u my world?!
Результат:
{'are': 1, 'hello': 1, 'my': 2, 'r': 1, 'so': 1, 'sweet': 2, 'u': 2, 'world': 2}