@Pirazok

Как подсчитать количество элементов в каждом файле директории?

Есть директория с файлами от 1.txt до 10.txt, каждый из которых содержит список чисел. Нужно подсчитать количество каждого из элементов и время выполнения ф-и. На выходе должен быть один словарь, со всех файлов.
Пример вывода:
{'50':15, '6':3, '45':6, '23':3}
Time elapsed: 0.1 sec
У меня пока что получилась такая ф-я, что делать дальше - непонятно (путь указан в конфигурации):
def dir_files():
    for item in Path(argv[1]).glob("*.txt"):
        with open(item) as f:
            return Counter(f.read().split())

Выводит только словарь одного файла 1.txt
  • Вопрос задан
  • 100 просмотров
Решения вопроса 2
@denislysenko
data engineer
def dir_files():
    res = {}
    
    for item in Path(argv[1]).glob("*.txt"):
        with open(item) as f:
            my_dict  = Counter(f.read().split())
            
            for key in my_dict:
                if key not in res:
                    res[key] = my_dict[key]
                elif key in res:
                    res[key] += my_dict[key]
    
    return res
Ответ написан
Комментировать
@Pirazok Автор вопроса
Найден еще один способ:
def counter(path):
    with open(path) as f:
        return Counter(f.read().split())


def add(dict1):
    dict2 = {**dict1}
    return dict2


def dir_files():
    return reduce(add, map(counter, Path(argv[1]).glob("*.txt")))
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
RTFM!
Ну так ты это и просишь программу сделать.
Она на первой итерации цикла for item in ... открывает файл, и выполняет return. На этом функция и останавливается.

Нужно просто немножко включить голову и сообразить, что раз нужен Counter для всех файлов, значит создавать его надо не внутри цикла, а до, и использовать его для обработки каждого файла. И возвращать результат тоже нужно возвращать не внутри цикла, а после.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы