Bir metin dosyam var.
Boş olup olmadığını nasıl kontrol edebilirim?
Bir metin dosyam var.
Boş olup olmadığını nasıl kontrol edebilirim?
Yanıtlar:
>>> import os
>>> os.stat("file").st_size == 0
True
import os
os.path.getsize(fullpathhere) > 0
OSError
ve iade etmeniz gerekebilir .
Her ikisi de getsize()
ve stat()
dosya yoksa bir istisna atar. Bu işlev fırlatmadan Doğru / Yanlış döndürür (daha basit ama daha az sağlam):
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)
ve os.path.getsize(fpath)
teklif edilen fonksiyon bir istisna bu durumda.
OSError
Bunun yerine denemek ve yakalamak daha iyi , başka bir yorumda önerildiği gibi .
TypeError
giriş fpath olması durumunda yükseltilecek yakalamak gerekir None
.
bir nedenden dolayı dosyayı zaten açık tuttuysanız şunu deneyebilirsiniz:
>>> 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
Tamam, ben sadece eğlenmek için ghostdog74 cevap ve yorumları birleştireceğim .
>>> import os
>>> os.stat('c:/pagefile.sys').st_size==0
False
False
boş olmayan bir dosya anlamına gelir.
Şimdi bir fonksiyon yazalım:
import os
def file_is_empty(path):
return os.stat(path).st_size==0
Python3'ü kullanıyorsanız , özelliğe (bayt cinsinden dosya boyutu) sahip olan yöntemi kullanarak bilgilere pathlib
erişebilirsiniz :os.stat()
Path.stat()
st_size
>>> from pathlib import Path
>>> mypath = Path("path/to/my/file")
>>> mypath.stat().st_size == 0 # True if empty
dosya nesneniz varsa, o zaman
>>> 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
Önemli bir gotcha: sıkıştırılmış boş bir dosya , test edildiğinde getsize()
veya stat()
işlevlerle sıfırlandığında sıfırdan farklı görünecektir :
$ 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
Bu nedenle, test edilecek dosyanın sıkıştırılıp sıkıştırılmadığını (örn. Dosya adı sonekini inceleyin) kontrol etmeli ve eğer öyleyse, geçici bir konuma kefaletle veya sıkıştırmayı açmalı, sıkıştırılmamış dosyayı test etmeli ve bittiğinde silmelisiniz.
Boş bir dosyanın ne olduğunu tanımlamadığınız için. Bazıları sadece boş satırları olan bir dosyayı da boş bir dosya olarak düşünebilir. Dolayısıyla dosyanızda yalnızca boş satırlar (boşluk karakteri, '\ r', '\ n', '\ t') olup olmadığını kontrol etmek istiyorsanız, aşağıdaki örneği takip edebilirsiniz:
Python3
import re
def whitespace_only(file):
content = open(file, 'r').read()
if re.search(r'^\s*$', content):
return True
Açıklayın: yukarıdaki örnek content
, dosyanın içeriğini ( ) eşleştirmek için normal ifade (normal ifade) kullanır .
Özellikle: for regex için: ^\s*$
bir bütün olarak dosya sadece boş satırlar ve / veya boş alanlar içeriyorsa anlamına gelir.
- ^
bir satırın başlangıcındaki konumu belirtir
- \s
herhangi bir boşluk karakteriyle eşleşir ([\ r \ n \ t \ f \ v] değerine eşit)
- *
Nicelik belirteci - Sıfır ve sınırsız kez, mümkün olduğunca çok kez eşleşir , mümkün olduğunca geri verir ( açgözlü)
- $
satırın sonundaki konumu belirtir
csv dosyasının boş olup olmadığını kontrol etmek istiyorsanız ....... bunu deneyin
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
yerine 6