У меня есть текстовый файл.
Как я могу проверить, пусто это или нет?
У меня есть текстовый файл.
Как я могу проверить, пусто это или нет?
Ответы:
>>> import os
>>> os.stat("file").st_size == 0
True
import os
os.path.getsize(fullpathhere) > 0
OSError
и вернуть False.
Оба 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
что будет повышено в случае, если входной fpath есть 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