Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/55: Рейтинг темы: голосов - 55, средняя оценка - 4.71
2 / 1 / 1
Регистрация: 13.09.2020
Сообщений: 3

Округление размеров файлов

12.10.2020, 20:04. Показов 11319. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В файле input.txt записаны имена файлов с расширениями и информационным объёмом, каждый с новой строки.

Напишите программу, которая сгруппирует файлы по расширению, найдёт для каждого из них общий объём и выведет в файл output.txt все файлы с итогом по группам в соответствии с расширением в алфавитном порядке. Внутри групп файлы сортируются также в алфавитном порядке по именам.

Итоговое значение объёма группы файлов записывается в самых крупных единицах измерения с округлением до целых.
Пример:
input.txt=
input.txt 3000 B
scratch.zip 5 MB
output.txt 1 KB
temp.txt 4 KB
boy.bmp 2000 KB
mario.bmp 1 MB
data.zip 900 KB

output.txt=
boy.bmp
mario.bmp
----------
Summary: 3 MB

input.txt
output.txt
temp.txt
----------
Summary: 8 KB

data.zip
scratch.zip
----------
Summary: 6 MB

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
d = {}
 
f = open('input.txt')
f = f.readlines()
for i in f:
    a = i.split()
    t = a[0].split('.')
    if t[1] not in d:
        d[t[1]] = [t[0] + '.' + t[1]]
    else:
        d[t[1]].append(t[0] + '.' + t[1])
f2 = open('output.txt', 'w')
list_keys = sorted(list(d.keys()))
for i in list_keys:
    for j in sorted(d[i]):
        f2.write(j + '\n')
    f2.write(f'----------\nSummary:\n\n')
Помогите сделать округление размера файлов.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.10.2020, 20:04
Ответы с готовыми решениями:

Обработка текстовых файлов (логов) больших размеров
Добрый день. Хочу написать "обработчик" текстовых логов. Логи очень большие (к примеру бывают 20000 строк и больше). Логи состоят...

Подсчет размеров файлов в байтах. Ошибки вычисления если файлов значительно количество
Здравствуйте. Рекурсивная функция пробегает по директории и поддиректориям, если встречает файл, добавляет его расширение в словарь, в...

Работа с файловой системой. Поиск файлов, определение размеров файлов и подсчёт среднего арифметического размера.
Всем привет! Помогите пожалуйста! Вообщем необходимо реализовать программу , которая будет содержать модуль иерархического поиска файлов...

16
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
12.10.2020, 21:35
Лучший ответ Сообщение было отмечено Lioueq как решение

Решение

Lioueq,
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
def size(a) :
    summ = {'B': 0, 'KB': 1, 'MB': 2, 'GB': 3, 'TB': 4}
    asum = 0
    for i in a :
        j = i.split()
        asum += int(j[0]) * 2**(10*int(summ[j[1]]))
    k = 0
    while asum > 1024 :
        asum /= 1024
        k += 1
    summ1 = {v:k for k, v in summ.items()}
    st = str(round(asum)) + ' ' + summ1[k]
    return st
 
d = {}
dt = {}
f = open('input.txt')
f = f.readlines()
for i in f:
    a = i.split(maxsplit = 1)
    t = a[0].split('.')
    if t[1] not in d:
        d[t[1]] = [t[0] + '.' + t[1]]
        dt[t[1]] = [a[1]]
    else:
        d[t[1]].append(t[0] + '.' + t[1])
        dt[t[1]].append(a[1])
f2 = open('output.txt', 'w')
list_keys = sorted(list(d.keys()))
for i in list_keys:
    for j in sorted(d[i]):
        f2.write(j + '\n')
    Summary = size(dt[i])
    f2.write('----------' + '\n' + 'Summary: ' + Summary + '\n \n')
Добавлено через 2 минуты
Lioueq, Прошло???
1
2 / 1 / 1
Регистрация: 13.09.2020
Сообщений: 3
12.10.2020, 21:39  [ТС]
Пока нет, оно ручной проверки, но по первым 2 тестам да, спасибо!
0
90 / 125 / 28
Регистрация: 17.10.2010
Сообщений: 1,332
12.10.2020, 22:42
Gdez, Компилятор почему то выдает ошибку, в чем проблема??????
Миниатюры
Округление размеров файлов  
0
5042 / 1069 / 149
Регистрация: 29.01.2013
Сообщений: 6,244
12.10.2020, 22:58

Не по теме:

наверное потому, что компилятора не существует, вот он и матерится из небытия, а ещё за использование некошерной вижлы для написания кода пайтона и злостного несоблюдения pep8


В PyCharm ошибок нет)
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
12.10.2020, 23:07
isaak, или код не так скопировал, или компилятор "чудит" - синтаксическая ошибка
0
12.10.2020, 23:09

Не по теме:

Цитата Сообщение от Gdez Посмотреть сообщение
компилятор
ну откуда у пайтона компилятор???

0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
12.10.2020, 23:16
Alli_Lupin,

Не по теме:

у меня "такое" бывает - в программировании чуть больше полугода

0
90 / 125 / 28
Регистрация: 17.10.2010
Сообщений: 1,332
12.10.2020, 23:21
Gdez, я компилирую в Visual Studio 2019, где установлены расширения Anaconda 2019.10 и Python3.7.
Миниатюры
Округление размеров файлов   Округление размеров файлов  
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
12.10.2020, 23:28
isaak, тут не помощник. Сам поставил анаконду этого года. PyCharm слетел. Пришлось заново. В начале анаконду, потом пайчарм с пропиской в анаконде. Но это в компе. Там очень редко пишу. В основном с айпада. Тут своя сборка
0
12.10.2020, 23:28

Не по теме:

Цитата Сообщение от isaak Посмотреть сообщение
я компилирую
ААААААААААААААААААА :wall::wall::wall:

0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
12.10.2020, 23:43
isaak, но раз раньше мои коды проходили у тебя, то может где то не так скопировал... Код то простой

Добавлено через 5 минут
isaak, попробуй на этот "кусок" поменять - может точка в операторе не нравится
Python
1
2
3
4
5
6
7
8
9
for i in f:
    a = i.split(maxsplit = 1)
    t = a[0].split('.')
    if t[1] not in d:
        d[t[1]] = [a[0]]
        dt[t[1]] = [a[1]]
    else:
        d[t[1]].append(a[0])
        dt[t[1]].append(a[1])
Добавлено через 6 минут
Или в последнем операторе блок '---------' убери, проверь, работает без него?
1
90 / 125 / 28
Регистрация: 17.10.2010
Сообщений: 1,332
13.10.2020, 00:54
Цитата Сообщение от Gdez Посмотреть сообщение
isaak, но раз раньше мои коды проходили у тебя, то может где то не так скопировал... Код то простой
Добавлено через 5 минут
isaak, попробуй на этот "кусок" поменять - может точка в операторе не нравится
Python
1
2
3
4
5
6
7
8
9
for i in f:
    a = i.split(maxsplit = 1)
    t = a[0].split('.')
    if t[1] not in d:
        d[t[1]] = [a[0]]
        dt[t[1]] = [a[1]]
    else:
        d[t[1]].append(a[0])
        dt[t[1]].append(a[1])
От души помогло.
0
90 / 125 / 28
Регистрация: 17.10.2010
Сообщений: 1,332
13.10.2020, 14:34
Gdez, Вчера по твоему совету скачал и установил PyCharm. Пробовал в нем скомпилировать, ни хрена не получилось, вылезло куча ошибок. Запустил Visual Studio 2019 заменил на твой последний кусок кода:
Цитата Сообщение от Gdez Посмотреть сообщение
Python
1
2
3
4
5
6
7
8
9
for i in f:
    a = i.split(maxsplit = 1)
    t = a[0].split('.')
    if t[1] not in d:
        d[t[1]] = [a[0]]
        dt[t[1]] = [a[1]]
    else:
        d[t[1]].append(a[0])
        dt[t[1]].append(a[1])
Окончательно получилось:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
def size(a) :
    summ = {'B': 0, 'KB': 1, 'MB': 2, 'GB': 3, 'TB': 4}
    asum = 0
    for i in a :
        j = i.split()
        asum += int(j[0]) * 2**(10*int(summ[j[1]]))
    k = 0
    while asum > 1024 :
        asum /= 1024
        k += 1
    summ1 = {v:k for k, v in summ.items()}
    st = str(round(asum)) + ' ' + summ1[k]
    return st
 
d = {}
dt = {}
f = open('input.txt')
f = f.readlines()
for i in f:
    a = i.split(maxsplit = 1)
    t = a[0].split('.')
    if t[1] not in d:
        d[t[1]] = [a[0]]
        dt[t[1]] = [a[1]]
    else:
        d[t[1]].append(a[0])
        dt[t[1]].append(a[1])
f2 = open('output.txt', 'w')
list_keys = sorted(list(d.keys()))
for i in list_keys:
    for j in sorted(d[i]):
        f2.write(j + '\n')
    Summary = size(dt[i])
    f2.write('----------' + '\n' + 'Summary: ' + Summary + '\n \n')
Вроде бы все работает! От души за помощь!
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
13.10.2020, 15:01
isaak, значит из-за точки все?
Но в терминале ругался на '---------'
Ок. Главное - прошло
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
13.10.2020, 15:17
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
t = '''\
input.txt 3000 B
scratch.zip 5 MB
output.txt 1 KB
temp.txt 4 KB
boy.bmp 2000 KB
mario.bmp 1 MB
data.zip 900 KB'''
 
files = {}
for line in t.split('\n'):
    f, s, u = line.split(' ')
    s = int(s)
    if u == 'B':
        pass
    elif u == 'KB':
        s *= 2 ** 10
    elif u == 'MB':
        s *= 2 ** 20
    else:
        raise ValueError(u)
    ext = f.rsplit('.', 1)[1]
    files.setdefault(ext, []).append((f, s))
 
print(files)
# {'txt': [('input.txt', 3000), ('output.txt', 1024), ('temp.txt', 4096)],
# 'zip': [('scratch.zip', 5242880), ('data.zip', 921600)],
# 'bmp': [('boy.bmp', 2048000), ('mario.bmp', 1048576)]}
1
5 / 4 / 2
Регистрация: 26.02.2016
Сообщений: 13
17.10.2020, 20:03
Цитата Сообщение от isaak Посмотреть сообщение
Python
1
while asum > 1024
При этом варианте результат будет, например, 1024 KB, а логичнее выводить уже 1 MB, тогда:

Python
1
while asum >= 1024:
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.10.2020, 20:03
Помогаю со студенческими работами здесь

Сравнение размеров файлов
Для 2 заданных в касеьве параметров директорий сравнить размеры всех содержащихся там файлов, создать файл, в котором каждой сравниваемой...

Сравнение размеров файлов
Всем привет! Подскажите, как сравнить файл(размер и название которого уже записаны в переменную) с другими файлами в указанной...

Обработка файлов в зависимости от их размеров
Помогите пожалуйста создать bat для обработки изображений. Необходимо для каждого файла выполнить команду compress.exe -i имя_файла1.png...

delphi 7 сверка размеров файлов
как можно написать, если в функции задам, название файла и его размещение в каком то каталоге, в байтах, допустим 27000 байтов, при этом...

Копирование файлов больших размеров
Задача состоит в том ,чтобы разделить большой файл на части и копировать их в отдельных потоках.Как можно это сделать?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru