Tehnografi.com - Технологические новости, обзоры и советы
[adinserter block="67"]

Как проверить размер файла и папки в Python?

Примечание. Следующая статья поможет вам: Как проверить размер файла и папки в Python?

В этой статье вы научитесь проверить размер файла или папки в Python

Python — один из самых универсальных языков программирования. С его помощью вы сможете превратить небольшую программу CLI (интерфейс командной строки) в сложное веб-приложение.

Однако одной из его наиболее недооцененных функций является возможность взаимодействия с операционными системами. Управление операциями ОС с помощью Python может сэкономить массу времени при создании процессов автоматизации.

Давайте посмотрим, как Python взаимодействует с ОС.

Как Python взаимодействует с ОС?

Python взаимодействует с ОС с помощью модулей os, sys, path и subprocess.

Никто не может жить изолированно от окружающей среды. Это также применимо к Python, где иногда необходимо взаимодействовать с операционной системой для достижения цели.

Python имеет несколько модулей, которые позволяют нам взаимодействовать с ОС. Наиболее часто используются os, sys, pathlib и subprocess.

Поскольку они являются встроенными модулями, вам не нужно устанавливать их с помощью PIP. Вы можете импортировать их все с помощью следующего оператора:

import os import sys import pathlib подпроцесс импорта

В приведенном ниже списке указаны основные функции каждого из этих импортов:

  • Операционные системы: Портативный способ использования специфичных для системы (в зависимости от вашей ОС) функций. В большинстве случаев это правильный выбор, если только вам не нужно что-то более продвинутое.
  • Система: Системные параметры и функции. Этот модуль обеспечивает доступ к переменным и функциям интерпретатора. Модуль os взаимодействует с операционной системой, а sys — с интерпретатором Python.
  • Путь: Расширенное использование пути. Позволяет представлять файловые системы как объекты с соответствующей семантикой для каждой ОС.
  • Подпроцесс: Выполнение и управление подпроцессами прямо из Python. Это включает в себя работу с кодами stdin, stdout и return. Вы можете узнать больше об этом, прочитав наше руководство по подпроцессам Python.
  • Существуют высокоуровневые библиотеки, которые включают в себя еще более конкретную функциональность в зависимости от ваших потребностей. Тем не менее, в большинстве случаев вы можете работать с вышеуказанными модулями.

    Примечание: Большинство функций, предоставляемых этими модулями, будут иметь различный вывод в зависимости от вашей ОС. Помните, что обычно лучше всего подходят UNIX и Python.

    Теперь вы получили представление о том, как Python взаимодействует с ОС, давайте перейдем к методам проверки размера файлов и папок. Все следующие решения доступны в размере файла и папки в репозитории Python GitHub.

    Использование os.stat().st_size

    В этом методе мы будем использовать функцию stat() из модуля os. Он возвращает много информации о конкретном пути.

    Примечание: os.path.getsize() функция также выполняет свою работу. Преимущество использования ос.стат().st_size заключается в том, что он не следует симлинкам.

    Прежде чем продолжить, давайте создадим тестовый файл с именем лорем.txt, в который мы собираемся вставить некоторые файлы . Мы можем посетить текстовый генератор Lorem Ipsum и вставить текст в лорем.txt файл.

    В этом же каталоге создайте файл с именем метод1.py и вставьте код ниже:

    размер импорта ОС = os.stat(‘lorem.txt’).st_size печать(размер)

    Давайте разберем, что мы делаем с этим кодом:

  • В первой строке мы импортируем Операционные системы модуль
  • Переменная size содержит размер файла лорем.txt
  • ос.стат() функция возвращает кучу информации, связанной с файлом
  • st_size атрибут представляет размер файла
  • Мы печатаем размер переменная
  • Попробуйте запустить скрипт Python. Вы получите другой результат в зависимости от содержания вашего лорем.txt файл.

    Выход:

    20064

    Вывод представлен в байтах. Это вообще нечитаемо, поэтому давайте очеловечим его, чтобы мы могли лучше видеть размер файла.

    Сначала установите пакет humanize, выполнив в своей оболочке следующую команду:

    pip установить гуманизировать

    Затем вы можете использовать натуральный размер() функция, которая преобразует значение в байтах в читаемый размер файла, например, КБ, МБ, ГБ или ТБ.

    import os from humanize import naturalsize size = os.stat(‘lorem.txt’).st_size print(size) print(naturalsize(size))

    Сначала приведенный выше код выводит размер файла в байтах, а затем выводит результат в удобочитаемом размере.

    Выход:

    20064 20,1 КБ

    Использование Pathlib

    Хотя pathlib предназначен для работы исключительно с путями, он включает в себя некоторые полезные функции из других модулей в качестве методов объектов Path (экземпляров класса Path).

    Создать файл метод2.py и импортируйте класс Path.

    из пути импорта pathlib

    Затем создайте объект Path, передавая путь к лорем.txt файл в качестве аргумента.

    file_ = Путь(‘lorem.txt’)

    Теперь вы можете получить доступ к статистика() метод класса Path. Он работает так же, как ос.стат() функция, поэтому вы сможете распечатать размер файла.

    печать (file_.stat().st_size)

    Выход:

    20064

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

    from pathlib import Путь от humanize import naturalsize size = Path(‘lorem.txt’).stat().st_size print(naturalsize(size))

    Этот код производит следующий вывод:

    20,1 КБ

    Использование команд Unix с подпроцессом:

    Модуль подпроцесса позволяет нам вызывать подпроцесс и управлять им из Python. Поэтому мы можем запускать любую команду и обрабатывать ее вывод непосредственно в Python.

    Примечание: Этот метод работает, только если вы используете ОС Unix (Linux, Mac).

    Откройте файл метод3.py и вставьте код ниже:

    из подпроцесса импорта запустить процесс = запустить([‘du’, ‘lorem.txt’]capture_output=True, text=True) print(process.stdout)

    Погружаемся в этот кусок кода:

  • Импортируем функцию запуска из модуля подпроцесса
  • Переменная process содержит результат выполнения команды дю лорем.txt
  • дю это утилита Linux, которая позволяет нам получить дисковое пространство файла
  • Capture_output дает нам доступ к выдающемуся (стандартному выводу) атрибуту
  • текст означает, что мы сохраняем вывод в виде строки вместо байтов
  • Мы печатаем стандартный вывод процесса
  • Если вы запустите приведенный выше код, вы получите следующий вывод:

    20 лорем.txt

    Как видите, он дает нам размер и имя файла. Если вы хотите получить только размер файла, вам нужно разделить вывод (помните, что это строка) и напечатать первый элемент.

    из подпроцесса импорта запустить процесс = запустить([‘du’, ‘lorem.txt’]Capture_output=True, text=True) size = process.stdout.split()[0]

    печать (размер)

    Выход:

    20

    Этот вывод вообще не читается. Мы можем сделать вывод, что используемая единица измерения — КБ (из-за предыдущих методов), но никто другой не мог угадать размер файла.

    Для решения этой проблемы мы можем использовать -час (удобочитаемый) флаг.

    Примечание: Вы можете получить руководство по этой команде, запустив человек дюили же дю -помощь.

    из подпроцесса импорта запустить процесс = запустить([‘du’, ‘-h’, ‘lorem.txt’]Capture_output=True, text=True) size = process.stdout.split()[0]

    печать (размер)

    Теперь вывод этого скрипта будет намного читабельнее:

    20 тыс.

    Если вы хотите узнать больше о модуле подпроцесса и возможных приложениях, ознакомьтесь с нашим руководством по подпроцессу Python.

    Получить размер папки рекурсивно

    Если вы хотите получить размер папки, вам нужно перебрать каждый файл, присутствующий в каталоге и его подкаталогах. Мы сделаем это двумя способами:

  • Перебор пути с помощью pathlib
  • Использование команды du с подпроцессом
  • Следующий код будет использовать путь к тестовому каталогу внутри моей домашней папки. Вам нужно будет заменить путь к этому файлу на каталог, размер которого вы хотите получить.

    Перебор пути с помощью pathlib

    Давайте посмотрим, как можно получить размер каталога, перебирая размеры файлов.

    from pathlib import Path from humanize import naturalsize def get_size(path = ‘.’): size = 0 for file_ in Path(path).rglob(‘*’): size += file_.stat().st_size return naturalsize(size ) test_path = Path.home() / ‘Документы/тесты/’ print(get_size(test_path))

    Этот фрагмент кода кажется немного пугающим, давайте разберем, что делает каждая его часть.

  • Импортировать Дорожка класс и натуральный размер() функция
  • Определите получить_размер() функция с параметром дорожкакоторый по умолчанию указывает на текущий каталог.
  • Переменная размера — это просто заполнитель, в который мы будем добавлять размер каждого файла.
  • Итерация по каждому файлу пути
  • rglob() метод рекурсивно возвращает файлы, соответствующие шаблону
  • rglob(‘*’)означает, что мы получаем все файлы внутри каталога

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

    В моем случае я получаю следующий вывод:

    403,4 МБ

    Использование команды du с подпроцессом

    Этот подход имеет некоторые преимущества:

  • Результат немного точнее
  • Это намного быстрее
  • из подпроцесса import run из pathlib import Path test_path = Path.home() / ‘Documents/tests/’ process = run([‘du’, ‘-sh’, test_path]Capture_output=True, text=True) size = process.stdout.split()[0]

    печать (размер)

    Мы используем тот же подход, что и в методе 3, но на этот раз мы получаем размер каталога, а не файла.

    Выход:

    481M

    Как видите, эти два способа получения размера папки возвращают немного разные результаты. Чем больше каталог, тем больше разницы вы получите.

    Вам решать выбирать между pathlib или подпроцесс подходит. Если вы знаете, что будете использовать Linux каждый раз, используйте подпроцессиначе вы можете использовать решение pathlib.

    Подводить итоги

    Результат Python чрезвычайно удобен при взаимодействии с ОС. Вы можете автоматизировать процессы и сэкономить много времени с помощью Python. Основными модулями для взаимодействия с os являются os, sys, path и subprocess.

    В этом уроке вы узнали:

  • Как Python взаимодействует с ОС
  • Использование встроенных модулей для выполнения операций ОС
  • Как использовать гуманизировать модуль для печати человекочитаемым
  • Чтобы рассчитать размер файла с 3 подходами
  • Чтобы вычислить размер каталога рекурсивно или с дю команда