Как вывести содержимое каталога в python?
Я пока только постигаю python, прошу помочь. Суть проблемы: надо написать программу, которая запрашивает у пользователя путь к каталогу и выводит в консоль его содержимое в виде списка файлов и каталогов. Для каждого элемента списка программа должна выводить имя, тип (файл или каталог), дату создания и размер (в кибибайтах, только для файлов). Список должен быть отсортирован по имени по возрастанию Результат работы приложения должен выводиться в консоль в следующем виде:
Имя файла Тип Дата создания Размер (КиБ)
--------- --- ------------- ------------
.idea Каталог 2015.12.31 -
main.py Файл 2015.12.31 15
Мой код:
import os
print("Имя файла Тип Дата создания Размер (КиБ)")
print("--------- --- ------------- ------------")
print(os.path.basename(__file__))
print(os.path.getctime(__file__))
print(os.path.getsize(__file__))
Что выводит у меня:
Имя файла Тип Дата создания Размер (КиБ)
--------- --- ------------- ------------
main.py
1625142504.6292036
271
То есть я не знаю как написать функцию для типа (файл или каталог), для даты у меня проблемы (неправильно выводится), а размер выводится скорее всего в байтах, я попробовал перевести в кибибайты умножив на *0.00097656, но размер стал 282, что неверно. Как сделать так, что было как в примере? Заранее спасибо
Ответы (2 шт):
Проверить, является ли пуль файлом можно через os.path.isfile("<path>")
Так же есть другие варианты решения
На счет размера файла - почему бы не делить на 1024 ? Будет читабельнее, и будете уверены что точно правильно.
Дата создания файла - os.stat() для линукса, os.path.getctime() для винды, источник
Так же проверьте работу на только что созданном файле
UPD: С чего решили что размер неверный? Какой должен быть? на сколько разница?
os.path.getctime() возвращает количество секунд, прошедшее с 1 января 1970 года, 00:00:00 (UTC). Поэтому прежде чем печатать дату, нужно это число конвертировать в нужный формат, например так:
d = time.strftime("%Y.%m.%d", os.path.getctime(__file__))
Выводить не тремя разными принтами, а в одном, чтобы все осталось в одной строчке:
name = os.path.basename(__file__)
date = time.strftime("%Y-%m-%d", os.path.getctime(__file__))
size = os.path.getsize(__file__)
print(name, date, size)
Ну и добавить между переменными табуляторов ("\t"), по потребности или выровнять через форматирование строк.