Методы проверки пустоты файла
Теперь, когда у нас есть тестовые файлы, давайте рассмотрим различные методы Python для проверки пустоты файла. Мы создадим скрипт Python, чтобы продемонстрировать каждый подход.
Создайте новый файл с именем check_empty.py
в вашем каталоге проекта, выполнив следующие шаги:
- В WebIDE щелкните значок "New File" в панели Explorer
- Назовите файл
check_empty.py
и сохраните его в каталоге ~/project
- Скопируйте код из каждого метода по мере их прохождения
Метод 1: Использование os.path.getsize()
Самый простой способ проверить, является ли файл пустым, – использовать функцию os.path.getsize()
из модуля os
. Эта функция возвращает размер файла в байтах. Если файл пуст, она возвращает 0
.
Добавьте следующий код в ваш файл check_empty.py
:
import os
def check_empty_using_getsize(file_path):
"""Check if a file is empty using os.path.getsize()"""
try:
if os.path.getsize(file_path) == 0:
return True
else:
return False
except OSError as e:
print(f"Error checking file: {e}")
return None
## Test with our files
empty_file = "/home/labex/project/empty_file.txt"
non_empty_file = "/home/labex/project/non_empty_file.txt"
print(f"Method 1: Using os.path.getsize()")
print(f"Is {empty_file} empty? {check_empty_using_getsize(empty_file)}")
print(f"Is {non_empty_file} empty? {check_empty_using_getsize(non_empty_file)}")
print()
Метод 2: Использование метода чтения файла
Другой подход заключается в открытии файла, чтении его содержимого и проверке, было ли что-либо прочитано. Если файл пуст, его чтение вернет пустую строку.
Добавьте следующий код в ваш файл check_empty.py
:
def check_empty_using_read(file_path):
"""Check if a file is empty by reading it"""
try:
with open(file_path, 'r') as file:
content = file.read()
if len(content) == 0:
return True
else:
return False
except IOError as e:
print(f"Error reading file: {e}")
return None
print(f"Method 2: Using file.read()")
print(f"Is {empty_file} empty? {check_empty_using_read(empty_file)}")
print(f"Is {non_empty_file} empty? {check_empty_using_read(non_empty_file)}")
print()
Метод 3: Использование os.stat()
Функция os.stat()
предоставляет подробную информацию о файле, включая его размер. Вы можете проверить атрибут st_size
, чтобы определить, является ли файл пустым.
Добавьте следующий код в ваш файл check_empty.py
:
def check_empty_using_stat(file_path):
"""Check if a file is empty using os.stat()"""
try:
file_stats = os.stat(file_path)
if file_stats.st_size == 0:
return True
else:
return False
except OSError as e:
print(f"Error getting file stats: {e}")
return None
print(f"Method 3: Using os.stat()")
print(f"Is {empty_file} empty? {check_empty_using_stat(empty_file)}")
print(f"Is {non_empty_file} empty? {check_empty_using_stat(non_empty_file)}")
print()
Метод 4: Использование модуля pathlib
Модуль pathlib
Python предоставляет объектно-ориентированный подход к работе с путями к файлам. Мы также можем использовать его для проверки, является ли файл пустым.
Добавьте следующий код в ваш файл check_empty.py
:
from pathlib import Path
def check_empty_using_pathlib(file_path):
"""Check if a file is empty using pathlib.Path"""
try:
path = Path(file_path)
if path.stat().st_size == 0:
return True
else:
return False
except OSError as e:
print(f"Error checking file with pathlib: {e}")
return None
print(f"Method 4: Using pathlib")
print(f"Is {empty_file} empty? {check_empty_using_pathlib(empty_file)}")
print(f"Is {non_empty_file} empty? {check_empty_using_pathlib(non_empty_file)}")
Запуск скрипта
Теперь давайте запустим наш скрипт, чтобы увидеть все методы в действии. В терминале выполните:
python3 ~/project/check_empty.py
Вы должны увидеть вывод, похожий на этот:
Method 1: Using os.path.getsize()
Is /home/labex/project/empty_file.txt empty? True
Is /home/labex/project/non_empty_file.txt empty? False
Method 2: Using file.read()
Is /home/labex/project/empty_file.txt empty? True
Is /home/labex/project/non_empty_file.txt empty? False
Method 3: Using os.stat()
Is /home/labex/project/empty_file.txt empty? True
Is /home/labex/project/non_empty_file.txt empty? False
Method 4: Using pathlib
Is /home/labex/project/empty_file.txt empty? True
Is /home/labex/project/non_empty_file.txt empty? False
Как видите, все четыре метода правильно идентифицируют наши пустые и непустые файлы. На следующем шаге мы создадим практический скрипт, который использует эти методы для управления файлами.