У мене є текстовий файл.
Як я можу перевірити, порожній він чи ні?
У мене є текстовий файл.
Як я можу перевірити, порожній він чи ні?
Відповіді:
>>> import os
>>> os.stat("file").st_size == 0
True
import os
os.path.getsize(fullpathhere) > 0
OSError
та повернути Неправдиве.
І те, getsize()
і stat()
інше викине виняток, якщо файл не існує. Ця функція поверне True / False без викидання (простіший, але менш надійний):
import os
def is_non_zero_file(fpath):
return os.path.isfile(fpath) and os.path.getsize(fpath) > 0
os.path.getsize()
os.path.isfile(fpath)
і os.path.getsize(fpath)
в цьому випадку запропонована функція призведе до виключення.
OSError
замість цього, як це запропоновано в іншому коментарі .
TypeError
що буде піднято у випадку, якщо вхідний шлях є None
.
якщо з якоїсь причини у вас вже був відкритий файл, ви можете спробувати це:
>>> with open('New Text Document.txt') as my_file:
... # I already have file open at this point.. now what?
... my_file.seek(0) #ensure you're at the start of the file..
... first_char = my_file.read(1) #get the first character
... if not first_char:
... print "file is empty" #first character is the empty string..
... else:
... my_file.seek(0) #first character wasn't empty, return to start of file.
... #use file now
...
file is empty
Гаразд, я з’єднаю відповідь ghostdog74 та коментарі, просто заради задоволення.
>>> import os
>>> os.stat('c:/pagefile.sys').st_size==0
False
False
означає не порожній файл.
Тож запишемо функцію:
import os
def file_is_empty(path):
return os.stat(path).st_size==0
Якщо ви використовуєте Python3, pathlib
ви можете отримати доступ до os.stat()
інформації за допомогою Path.stat()
методу, який має атрибут st_size
(розмір файлу в байтах):
>>> from pathlib import Path
>>> mypath = Path("path/to/my/file")
>>> mypath.stat().st_size == 0 # True if empty
якщо у вас є об'єкт файлу, то
>>> import os
>>> with open('new_file.txt') as my_file:
... my_file.seek(0, os.SEEK_END) # go to end of file
... if my_file.tell(): # if current position is truish (i.e != 0)
... my_file.seek(0) # rewind the file for later use
... else:
... print "file is empty"
...
file is empty
Важлива проблема: стиснений порожній файл буде здаватися не нульовим при тестуванні з getsize()
або stat()
функціями:
$ python
>>> import os
>>> os.path.getsize('empty-file.txt.gz')
35
>>> os.stat("empty-file.txt.gz").st_size == 0
False
$ gzip -cd empty-file.txt.gz | wc
0 0 0
Тож слід перевірити, чи не стискається тестований файл (наприклад, вивчити суфікс назви файлу), і якщо так, виправдайте або розпакуйте його до тимчасового місця, протестуйте нестиснений файл, а потім видаліть його, коли буде зроблено.
Оскільки ви не визначили, що таке порожній файл. Деякі можуть вважати файл із просто порожніми рядками також порожній файл. Тож якщо ви хочете перевірити, чи містить ваш файл лише порожні рядки (будь-який символ пробілу, '\ r', '\ n', '\ t') , ви можете слідувати прикладу нижче:
Python3
import re
def whitespace_only(file):
content = open(file, 'r').read()
if re.search(r'^\s*$', content):
return True
Поясніть: у наведеному вище прикладі використовується регулярний вираз (регулярний вираз) для відповідності вмісту ( content
) файлу.
Зокрема, для регулярного вираження: ^\s*$
в цілому означає, якщо файл містить лише порожні рядки та / або порожні пробіли.
- ^
затверджує позицію на початку рядка
- \s
відповідає будь-якому символу пробілу (рівний [\ r \ n \ t \ f \ v])
- *
Квантор - Збігає між нулем і необмеженим часом, як можна більше разів, віддаючи по мірі необхідності ( жадібний)
- $
затверджує позицію в кінці рядка
якщо ви хочете перевірити, чи файл CSV порожній чи ні ....... спробуйте це
with open('file.csv','a',newline='') as f:
csv_writer=DictWriter(f,fieldnames=['user_name','user_age','user_email','user_gender','user_type','user_check'])
if os.stat('file.csv').st_size > 0:
pass
else:
csv_writer.writeheader()
stat.ST_SIZE
замість 6