Как проверить пустой ли файл python

Обновлено: 02.07.2024

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

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

Обратите внимание, что у нас есть один каталог ( dir ), один файл ( file.txt ), одна файловая символическая ссылка ( link.txt ), и одна символьная ссылка каталога ( sym ).

Проверка наличия файла

Это, пожалуй, самый простой способ проверить, существует ли файл и , если это файл.

Обратите внимание, что os.path.isfile следует за символическими ссылками, поэтому мы получаем True при проверке link.txt .

is file на самом деле является просто вспомогательным методом, который внутренне использует os.stat и stat.S_IS REG(mode) внизу, которого мы коснемся позже.

Проверка наличия каталога

Опять же, как и isfile , os.path.isdir следует за символическими ссылками. Это также просто простая оболочка вокруг os.stat и stat.S_ISDIR(mode) , так что вы не получаете от нее ничего, кроме удобства.

Проверка Того, Существуют Ли Они

Как видите, ему все равно, указывает ли путь на файл, каталог или символическую ссылку, так что это почти то же самое, что вы используете isfile(path) или isdir(path) . Но на самом деле внутренне он просто пытается вызвать os.stat(path) , и если возникает ошибка , то он возвращает False .

Передовой

На протяжении всей статьи я упоминал, как все вышеперечисленные методы используют метод os.stat , поэтому я решил, что было бы полезно взглянуть на него. Это метод более низкого уровня, который предоставит вам подробную информацию о файлах, каталогах, сокетах, буферах и многом другом.

Как и все другие методы, которые мы уже рассмотрели, os.stat следует за символическими ссылками, поэтому, если вы хотите получить информацию о статистике по ссылке, попробуйте использовать os.lstat() вместо этого.

Поскольку каждая операционная система отличается, данные, предоставляемые os.stat , сильно различаются. Вот лишь некоторые из данных, которые объединяет каждая ОС:

  • st_mode : биты защиты
  • st_uid : идентификатор пользователя владельца
  • st_gid : идентификатор группы владельца
  • st_size : размер файла в байтах
  • st_atime : время последнего доступа
  • st_mtime : время последней модификации
  • st_ctime : время последнего изменения метаданных в Unix или время создания в Windows

Затем вы можете использовать эти данные с модулем stat , чтобы получить интересную информацию, например, указывает ли путь на сокет ( stat.S_ISSOCK(mode) ) или если файл на самом деле является именованным каналом ( stat.S_ISFIFO(mode) ).

Если вам нужна более продвинутая функциональность, то именно сюда вам и следует обратиться. Но в течение 90% времени, когда вы имеете дело с каталогами и файлами, модули os или os.path должны охватывать вас.

Хотя один допустимый вариант использования может быть, когда вы выполняете несколько тестов для одного и того же файла и хотите избежать накладных расходов системного вызова stat для каждого теста. Так что если у вас есть довольно много тестов, чтобы сделать это, то это поможет вам сделать это более эффективно.

Вопрос 1: Как я могу проверить, что весь файл .xls или .csv пуст. Это код, который я использую:

Пустой файл .xls имеет размер более 5,6 КБ, поэтому неясно, содержит ли он какое-либо содержимое. Как проверить, что файл xls или csv пуст?

Вопрос 2: мне нужно проверить заголовок файла. Как я могу сказать Python, что файлы, которые представляют собой одну строку заголовков, пусты?

Это моя попытка. Как мне продолжить этот код?

Пожалуйста, предоставьте решение для обоих вопросов. Заранее спасибо.

Это просто в пандах с .empty. метод. Сделай это

Это также вернет True для файла с только заголовками, как в

Как насчет этого:

Где path - это путь к вашему файлу xls или csv.

Я не думаю, что Stackoverflow позволяет 2 вопроса в то время, но позвольте мне дать вам мой ответ для части Excel

О заголовке: позвольте мне дать вам небольшую подсказку, протестируйте sheet.nrows == 1 .

Вопрос 2: мне нужно проверить заголовок файла. Как я могу сказать Python, что файлы, которые представляют собой одну строку заголовков, пусты?

Вы можете просто проверить строку в файлах.

Вопрос 1: Как проверить, что весь файл .xls пуст.

Вопрос 2: Как я проверяю заголовок файла. Если файл имеет только заголовок (я имею в виду только одну строку), мне нужно обработать файл пустым. Как я могу это сделать.

Протестировано с Python: 3.4.2

Что касается вашего кода Excel, мне нравится решение pandas , которое кто-то придумал, но если вы на работе и не можете его установить, то я думаю, что вы почти подошли к подходу с кодом, который вы использовали. У вас есть петля, пересекающая каждый лист. Таким образом, вы можете проверить строки на каждом листе, а затем предпринять соответствующие действия, если они пусты:

Примечание. Я добавил переменную для имени файла, чтобы при ее использовании было проще изменить ее в одном месте кода. Я также добавил : в объявление вашей функции, в котором его не было. Если вы хотите, чтобы тест имел только заголовок (у меня полностью пустая страница), измените <= на == .

Относительно связанной проблемы CSV. CSV это просто текстовый файл. Мы можем быть достаточно уверены, что файл пуст, за исключением заголовка, использующего подход кодирования, подобный следующему. Я бы попробовал этот код на примере файлов, и вы можете настроить мою математическую логику. Например, может быть достаточно использовать + 1 для сравнения if вместо *1.5 , как у меня есть. Я думаю, что с пробелами или, если несколько символов были ошибочно включены, это было бы хорошей подушкой размера файла + символы в тесте второй строки, приведенные в логике кодирования.

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

Во время тестирования команды readline извлекли это содержимое из файла:

Этот подход означает, что вы можете получить доступ к результатам теста, которые являются True / False в элементе [0] списка, который он возвращает. Дополнительные элементы позволяют вам получить информацию о входных данных для принятия решения программой на случай, если вы захотите настроить ее позже.

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

В этом уроке мы узнаем, как проверить, пуст ли файл или каталог в Python на примерах. Это можно сделать с помощью модулей os и path lib.

Вступление

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

Различайте файл и каталог

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

Допустим, у нас есть две переменные-заполнители dirpath и file path , идентифицирующие локальный каталог и файл:

Использование os.path

Python предоставляет модуль os , который представляет собой стандартный пакет функций, объектов и констант Python для работы с операционной системой.

os.path предоставляет нам функции isfile() и isdir () , чтобы легко отличить файл от каталога:

Обе эти функции возвращают значение Boolean .

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

Python 3.4 представил модуль pathlib , который предоставляет объектно-ориентированный интерфейс для работы с файловыми системами.

path lib упрощает работу с файловыми системами по сравнению с os или os.path .

Класс Path модуля pathlib принимает путь в качестве аргумента и возвращает объект Path , который можно легко запросить или связать с помощью методов и атрибутов:

Здесь мы проверяем, является ли объект Path файлом или каталогом.

Проверьте, пуст ли файл

Пустой файл или файл с нулевым байтом-это любой файл, который не содержит данных или содержимого. Файл может быть любого типа. Некоторые файлы (например, музыкальные файлы) могут не иметь данных, но все же содержать метаданные (например, автор). Такие файлы не могут рассматриваться как пустой файл.

Можно быстро создать пустой файл в Linux и Mac OS:

Давайте посмотрим на тип и размер этих файлов:

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

Кроме того, мы можем использовать модуль Python os для проверки этой информации. Функция os.stat() возвращает объект stat_result . Этот объект в основном представляет собой структуру данных, которая представляет собой набор свойств файла:

Использование os.path

Модуль Python os.path позволяет очень легко работать с путями к файлам. Помимо проверки наличия пути или определения их типа, мы также можем получить размер файла, указанного в виде строки.

os.path.getsize() возвращает размер файла, указанного как path-like-object и намного проще в использовании, чем os.stat() :

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

Если мы работаем на Python 3.4 или выше, мы можем использовать модуль pathlib для получения размера файла. Это в основном заменяет модуль os . Path.stat() возвращает свойство stat_result объекта Path , эквивалентное возвращаемому значению os.stat() :

Проверьте, пуст ли каталог

Каталог, который не содержит других файлов или подкаталогов, является пустым каталогом. Однако каждый каталог (даже пустой) содержит следующие 2 записи:

  • . ( произносится точка ) ссылается на текущий каталог и полезен в таких операциях, как поиск чего-то внутри текущего каталога
  • .. ( произносится двойная точка ) ссылается на родительский каталог текущего каталога, требуется отступить от текущего каталога

В пустом каталоге нет никаких элементов:

Непустой каталог имеет один файл:

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

Функция os.listdir() возвращает последовательность, содержащую имена всех элементов, найденных в пути к каталогу, переданном в качестве аргумента. Он не включает в себя . и .. записи:

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

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

Функция os.listdir() полезна, когда вам нужна целая куча имен записей в виде списка для дальнейшей обработки. Однако, чтобы проверить, есть ли хотя бы одна запись, нам не нужен список всех файлов внутри.

Если каталог огромен, то выполнение функции os.listdir() займет много времени, тогда как до тех пор, пока существует более 0 итак, на наш вопрос дан ответ.

На помощь приходит функция os.scandir () , которая возвращает ленивую итерацию или генератор.

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

Этот подход примерно в 200 раз быстрее для каталогов с

Поэтому вместо того, чтобы зацикливаться на всей структуре каталогов, мы можем использовать os.scandir () , чтобы проверить, есть ли хотя бы одна запись, найденная в пути к каталогу:

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

Предпочтительным подходом к модулю os является модуль pathlib . Мы будем использовать pathlib.Path.iterdir() , который не только проще, но и намного проще в использовании, чем os.listdir() или os.scandir() .

Он возвращает ленивый итеративный или генераторный объект , очень похожий на os.scandir () , который перебирает файлы в пути каталога, переданном в качестве аргумента:

Используя next() , мы пытаемся получить следующий доступный элемент. С None в качестве default return item, next() не вызовет StopIteration исключение в случае отсутствия элемента в коллекции:

Большинство встроенных функций Python работают с iterables , включая any() функцию, которая возвращает обратно True если iterable имеет хотя бы один элемент, который может быть оценен как True :

Вывод

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

Это можно сделать с помощью модулей os или path lib и их удобных функций и классов.

Как проверить, существует ли файл в Python? Мы научились выполнять различные операции с файлом в наших предыдущих учебниках по обработке файлов , включая чтение , запись , удаление , а также копирование файла на Python. Но прежде чем мы выполним какую-либо из этих операций с файлом, необходимо проверить, существует ли файл уже или нет.

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

Давайте перейдем к теме и рассмотрим некоторые методы проверки существования файла.

Методы проверки наличия файла в Python

Мы можем проверить, существует ли файл в Python, используя различные методы, упомянутые ниже.

1. Использование модуля pathlib

Модуль pathlib в Python поставляется с некоторыми интересными методами, такими как is_file () , is_dir () , exists () и т. Д. Давайте рассмотрим несколько примеров один за другим:

2. Использование модуля ОС

Одним из широко используемых методов проверки существования файлов является модуль os.path из стандартной библиотеки python. Он поставляется с некоторыми базовыми методами, такими как is file() и exists () , аналогичными модулю pathlib . Давайте подробнее рассмотрим один пример:

  • Аналогично path lib modules exists() и is_file() методы os.exists() , а также os.isfile() также выполняют аналогичную проверку соответственно.
  • Единственное различие заключается в том, что модуль pathlib привносит какой-то отличный объектно-ориентированный подход и рассматривает путь как объект пути, а не строку(в случае модуля ос).

3.Использование обработки исключений

Давайте теперь рассмотрим несколько различных методов, чтобы проверить, существует ли файл в Python с помощью исключений.

На этот раз мы собираемся использовать встроенную функцию open () , чтобы открыть файл и проверить наличие исключения , которое, если оно возникнет, подтвердит, что файл не существует или недоступен. Например:

  • В приведенном выше коде с file.txt существовал в нашей системе, FileNotFoundError не вызывается, и файл успешно закрывается.

Опять же, когда no-file.txt не существует на вашем компьютере:

  • Таким образом, мы можем ясно видеть, что, когда файл не найден, возникает исключение FileNotFoundError .

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

Читайте также: