Проверка файла на пустоту
Помогите, пожалуйста. Как правильно проверить файл на пустоту (т.е. в файле нет абсолютно ничего)?
Добавлено через 6 минут
И еще как создать файл с определенным именем?
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Проверка файла на пустоту
очень важный для меня вопрос. как проверить файл на пустоту. мне нужно будет если файл выполнять.
Проверка файла на пустоту
Здравствуйте, нужно сделать проверку на пустоту, если файл пуст то идет одна ветка,если не пуст.
Проверка на пустоту файла С++
Помогите реализовать проверку на наличие файла и его пустоту. Если файл не открывается, вывести.

проверка на пустоту файла.
суть в чем.у меня если в файле записана хоть одна цифра программа работает.если же файл пустой т.е.
![]()
![]()
35345 / 19945 / 4179
Регистрация: 12.02.2012
Сообщений: 33,093
Записей в блоге: 13
Для существующего файла — нужно взять его размер:
1 2 3 4 5 6 7 8 9
import System.IO import System.Environment main = do [fnam] getArgs handle openFile fnam ReadMode size hFileSize handle if size==0 then putStrLn "File is empty" else putStrLn "File is not empty" hClose handle
Определить, является ли файл пустым в Python
В этом посте мы обсудим, как определить, является ли файл пустым в Python.
Вы можете легко проверить наличие пустого файла в Python с помощью узнать размер файла, который должен быть 0 байт. Есть несколько способов сделать это:
1. Использование os модуль
The os.stat() функция возвращает stat_result объект, чьи st_size атрибут хранит размер файла в байтах.
isempty = os . stat ( ‘path\to\file\filename.ext’ ) . st_size == 0
print ( isempty )
В качестве альтернативы вы можете использовать os.path.getsize() функция для получения указанного размера файла в байтах.
Как проверить пустой ли файл csv Python
В некоторых ситуация программа ничего не добавляет в файл csv, данные из которого (если они есть) должны использоваться в следующих шагах. Как перед следующим шагом проверить есть ли что-то в файле?
with open("itog.csv", newline='') as r: reader = csv.reader(r, delimiter=';')
Отслеживать
задан 2 янв 2020 в 18:04
ChikChirik ChikChirik
514 2 2 золотых знака 13 13 серебряных знаков 43 43 бронзовых знака
проверить, пустой ли файл или нет: stackoverflow.com/questions/2507808/…
2 янв 2020 в 18:18
Файл из пробелов пустой или нет?
2 янв 2020 в 21:48
На правах догадки: по количеству элементов в списке readlines() если предполагается что заголовки полей в «пустом» файле должны присутствовать то количество элементов будет == 1 для «пустого» файла. Если же не предполагается наличие строки заголовков то == 0. Но если в пустом файле могут быть и заголовки и строки из одних разделителей тогда уже надо по другому
Python: проверка на пустоту файла или каталога
Python имеет набор встроенных библиотечных объектов и функций, которые помогут нам в решении этой задачи. В этом руководстве мы узнаем, как проверить, пуст ли файл или каталог в Python.
Определение файл или каталог
Когда мы хотим проверить, пуст ли путь или нет, мы захотим узнать, является ли он файлом или каталогом, поскольку это влияет на подход, который мы хотим использовать.
Допустим, у нас есть две переменные — dirpath и filepath идентифицирующие локальный каталог и файл:
dirpath = '/mnt/f/code.books/articles/python' filepath = '/mnt/f/code.books/articles/python/code/file_dir.py'
Использование os.path
Python предоставляет модуль os , который представляет собой стандартный пакет Python функций, объектов и констант для работы с операционной системой.
os.path предоставляет нам функции isfile() и isdir() с помощью которых легко отличить файл и директорию:
import os dirpath = '/mnt/f/code.books/articles/python' filepath = '/mnt/f/code.books/articles/python/code/file_dir.py' os.path.isfile(dirpath) # False os.path.isdir(dirpath) # True os.path.isfile(filepath) # True os.path.isdir(filepath) # False
Обе эти функции возвращают Boolean значение.
Использование pathlib
Python 3.4 представил модуль pathlib , который предоставляет объектно-ориентированный интерфейс для работы с файловыми системами.
pathlib упрощает работу с файловыми системами по сравнению с os или os.path .
Класс Path модуля pathlib принимает путь в качестве аргумента и возвращает объект Path , который можно легко запросить или связать с помощью методов и атрибутов:
from pathlib import Path dirpath = '/mnt/f/code.books/articles/python' filepath = '/mnt/f/code.books/articles/python/code/file_dir.py' Path(dirpath).is_file() # False Path(dirpath).is_dir() # True Path(filepath).is_file() # True Path(dirpath).is_file() # False
Здесь мы проверяем, является ли объект Path файлом или каталогом.
Проверьте, пуст ли файл
Пустой файл или файл с нулевым байтом — это любой файл, который не содержит данных или содержимого. Файл может быть любого типа. Некоторые файлы (например, музыкальные файлы) могут не иметь данных, но все же содержать метаданные (например, автор). Такие файлы не могут рассматриваться как пустой файл.
В Linux и MacOS можно быстро создать пустой файл:
touch emptyfile
type nul > emptyfile
Давайте теперь определим переменные emptyfile и nonemptyfile указывая на пустой файл, имеющий нулевые байты, и непустой файл, имеющий размер одного байта:
emptyfile = '/mnt/f/code.books/articles/python/emptyfile' nonemptyfile = '/mnt/f/code.books/articles/python/onebytefile'
Давайте посмотрим на тип и размер этих файлов:
$ ls -l -rwxrwxrwx 1 root root 0 Sep 10 18:06 emptyfile -rwxrwxrwx 1 root root 1 Sep 10 18:08 onebytefile $ file emptyfile emptyfile: empty $ file onebytefile onebytefile: very short file (no magic)
Использование os.stat
В качестве альтернативы мы можем использовать Python модуль os для проверки этой информации. Функция os.stat() возвращает объект stat_result . Этот объект в основном представляет собой структуру данных, которая представляет собой набор свойств файла:
import os emptyfile = '/mnt/f/code.books/articles/python/emptyfile' nonemptyfile = '/mnt/f/code.books/articles/python/onebytefile' result = os.stat(nonemptyfile) result.st_size # 1 result = os.stat(emptyfile) result.st_size # 0
Использование os.path
Python модуль os.path позволяет очень легко работать с путями к файлам. Помимо проверки существования пути или определения их типа, мы также можем получить размер файла, указанного в виде строки.
os.path.getsize() возвращает размер файла, указанного как объект, подобный path-like, и его намного проще использовать, чем os.stat() :
import os emptyfile = '/mnt/f/code.books/articles/python/emptyfile' nonemptyfile = '/mnt/f/code.books/articles/python/onebytefile' os.path.getsize(emptyfile) # 0 os.path.getsize(nonemptyfile) # 1
Использование pathlib
Если мы работаем c Python 3.4 или выше, мы можем использовать модуль pathlib для получения размера файла. Он в основном заменяет модуль os . Path.stat() возвращает свойство stat_result объекта Path , эквивалентное возвращаемому значению os.stat() :
from pathlib import Path emptyfile = '/mnt/f/code.books/articles/python/emptyfile' nonemptyfile = '/mnt/f/code.books/articles/python/onebytefile' print('File stats: ' + Path(emptyfile).stat()) print('File size: ' + Path(emptyfile).stat().st_size + ' byte(s)') print('File stats: ' + Path(nonemptyfile).stat()) print('File size: ' + Path(nonemptyfile).stat().st_size + ' byte(s)')
File stats: os.stat_result(st_mode=33279, st_ino=14355223812249048, st_dev=17, st_nlink=1, st_uid=0, st_gid=0, st_size=0, st_atime=1600087010, st_mtime=1600087010, st_ctime=1600087010) File size: 0 byte(s) File stats: os.stat_result(st_mode=33279, st_ino=5629499534218713, st_dev=17, st_nlink=1, st_uid=0, st_gid=0, st_size=1, st_atime=1600088120, st_mtime=1600088072, st_ctime=1600088072) File size: 1 byte(s)
Проверьте, пуст ли каталог
Каталог, в котором нет других файлов или подкаталогов, является пустым каталогом. Однако каждый каталог (даже пустой) содержит следующие 2 записи:
- . ссылается на текущий каталог и полезен в таких операциях, как поиск чего-либо внутри текущего каталога
- .. ссылается на родительский каталог текущего каталога, требуется для возврата из текущего каталога
Давайте определим две переменные — emptydirectory и nonemptydirectory укажем на пустой и непустой каталог:
emptydirectory = '/mnt/f/code.books/articles/python/markdown' nonemptydirectory = '/mnt/f/code.books/articles/python/code'
В пустом каталоге нет никаких элементов:
$ pwd /mnt/f/code.books/articles/python/markdown $ ls -la total 0 drwxrwxrwx 1 root root 512 Sep 11 11:52 . drwxrwxrwx 1 root root 512 Sep 10 20:22 ..
Непустой каталог содержит единственный файл:
$ pwd /mnt/f/code.books/articles/python/code $ ls -la total 0 drwxrwxrwx 1 root root 512 Sep 14 11:02 . drwxrwxrwx 1 root root 512 Sep 14 18:22 .. -rwxrwxrwx 1 root root 425 Sep 14 12:27 file_dir.py
Использование os.listdir()
В os.listdir() возвращает последовательность, которая содержит имена всех элементов , найденных в пути каталога, переданного в качестве аргумента. Она не включает в себя . и .. записи:
import os os.listdir(emptydirectory) # [] os.listdir(nonemptydirectory) # ['file_dir.py']
Расчет длины возвращенного списка легко определяет, пуст каталог или нет. Пустой каталог всегда имеет нулевую длину:
import os print(len(os.listdir(nonemptydirectory))) # 1 print(len(os.listdir(emptydirectory))) # 0
Использование os.scandir()
Функция os.listdir() полезна, когда вам нужна целая куча названия записей в виде списка для дальнейшей обработки. Однако, чтобы проверить, есть ли хотя бы одна запись, нам не нужен список всех файлов внутри.
Если каталог огромен, выполнение функции os.listdir() займет много времени, в то время как, если записей больше 0 , на наш вопрос будет дан ответ.
На помощь приходит функция os.scandir() , возвращающая ленивую итерацию или генератор.
Генераторы возвращают итераторы, которые можно перебирать, как обычные итерации, такие как список. Но в отличие от списка, набора или словаря, они не хранят в памяти целую кучу значений, а вместо этого возвращают новое значение по запросу.
Этот подход примерно в ~ 200 раз быстрее для каталогов из ~ 1000 файлов.
Поэтому вместо того, чтобы перебирать всю структуру каталогов, мы можем использовать os.scandir() , чтобы проверить, есть ли хотя бы одна запись в пути к каталогу:
import os emptydirectory = '/mnt/f/code.books/articles/python/markdown' nonemptydirectory = '/mnt/f/code.books/articles/python/code' print(next(os.scandir(emptydirectory), None)) print(next(os.scandir(nonemptydirectory), None)) #
Мы используем встроенную функцию next() для получения следующего доступного элемента из ленивого итератора, возвращаемого функцией os.scandir() . Поскольку в emptydirectory нет доступных элементов — он возвращается None , тогда как для nonemptydirectory возвращается объект os.DirEntry .
Вывод
В этом руководстве мы рассмотрели, как различать файлы и каталоги, после чего проверили их пустоту.
Это можно сделать с помощью модулей os или pathlib и их удобных функций и классов.
