Saya punya file teks.
Bagaimana saya bisa mengecek apakah itu kosong atau tidak?
Saya punya file teks.
Bagaimana saya bisa mengecek apakah itu kosong atau tidak?
Jawaban:
>>> import os
>>> os.stat("file").st_size == 0
True
import os
os.path.getsize(fullpathhere) > 0
OSError
dan mengembalikan False.
Keduanya getsize()
dan stat()
akan melempar pengecualian jika file tidak ada. Fungsi ini akan mengembalikan Benar / Salah tanpa melempar (lebih sederhana tetapi kurang kuat):
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)
dan os.path.getsize(fpath)
, dalam hal ini fungsi yang diusulkan akan menimbulkan pengecualian.
OSError
saja, seperti yang diusulkan dalam komentar lain .
TypeError
yang akan dinaikkan jika input fpath None
.
jika karena suatu alasan Anda sudah membuka file Anda dapat mencoba ini:
>>> 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
Ok jadi saya akan menggabungkan jawaban ghostdog74 dan komentarnya, hanya untuk bersenang-senang.
>>> import os
>>> os.stat('c:/pagefile.sys').st_size==0
False
False
berarti file yang tidak kosong.
Jadi mari kita tulis fungsi:
import os
def file_is_empty(path):
return os.stat(path).st_size==0
Jika Anda menggunakan Python3 dengan pathlib
Anda dapat mengakses os.stat()
informasi menggunakan Path.stat()
metode, yang memiliki atribut st_size
(ukuran file dalam byte):
>>> from pathlib import Path
>>> mypath = Path("path/to/my/file")
>>> mypath.stat().st_size == 0 # True if empty
jika Anda memiliki objek file, maka
>>> 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
Gotcha penting: file kosong terkompresi akan tampak tidak nol ketika diuji dengan getsize()
atau stat()
fungsinya:
$ 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
Jadi, Anda harus memeriksa apakah file yang akan diuji dikompresi (mis., Periksa akhiran nama file) dan jika demikian, bail atau buka kompresi ke lokasi sementara, uji file yang tidak dikompresi, dan kemudian hapus ketika selesai.
Karena Anda belum menentukan apa file kosong itu. Beberapa orang mungkin menganggap file hanya dengan baris kosong dan juga file kosong. Jadi, jika Anda ingin memeriksa apakah file Anda hanya berisi baris kosong (karakter spasi apa saja, '\ r', '\ n', '\ t') , Anda dapat mengikuti contoh di bawah ini:
Python3
import re
def whitespace_only(file):
content = open(file, 'r').read()
if re.search(r'^\s*$', content):
return True
Jelaskan: contoh di atas menggunakan ekspresi reguler (regex) untuk mencocokkan konten ( content
) file.
Khususnya: untuk regex dari: ^\s*$
secara keseluruhan berarti jika file hanya berisi baris kosong dan / atau spasi kosong.
- ^
menegaskan posisi pada awal garis
- \s
cocok dengan karakter spasi apa pun (sama dengan [\ r \ n \ t \ f \ v])
- *
Kuantifikasi - Menyesuaikan antara nol dan waktu tanpa batas, sebanyak mungkin, memberikan kembali sesuai kebutuhan ( serakah)
- $
menegaskan posisi di akhir baris
jika Anda ingin memeriksa file csv kosong atau tidak ....... coba ini
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
bukannya 6