2010-03-24 13 views

Odpowiedz

176
>>> import os 
>>> os.stat("file").st_size == 0 
True 
+9

'stat.ST_SIZE' zamiast 6 – wRAR

+1

też jest w porządku. ale nie chcę importować statystyk. Jest ona krótka i wystarczająco słodka, a wielkość na zwróconej liście nie zmieni się w najbliższym czasie. – ghostdog74

+48

@wRAR: os.stat ("plik"). St_size jest jeszcze lepszy –

87
import os  
os.path.getsize(fullpathhere) > 0 
+6

Dla bezpieczeństwa może trzeba złapać 'OSError' i return false. – kennytm

+3

Jaka jest różnica/zaleta przy użyciu tego stosunku do os.state ("plik"). St_size? –

+0

Wygląda na to, że oba są takie same pod maską: https://stackoverflow.com/a/18962257/1397061 –

16

jeśli z jakiegoś powodu już otworzyć plik można spróbować to:

>>> 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 
54

Zarówno getsize() i stat() rzuci wyjątek, jeśli plik nie istnieje. Ta funkcja zwróci Prawda/Fałsz bez rzucania:

import os 
def is_non_zero_file(fpath): 
    return os.path.isfile(fpath) and os.path.getsize(fpath) > 0 
+0

Zdecydowanie jak użycie '' os.path.getsize() '' –

+3

Istnieje warunek wyścigu, ponieważ plik może być usunięto między wywołaniami do 'os.path.isfile (fpath)' i 'os.path.getsize (fpath)', w takim przypadku proponowana funkcja spowoduje zgłoszenie wyjątku. – s3rvac

+1

Lepiej spróbować złapać 'OSError' zamiast tego, jak zaproponowano [w innym komentarzu] (http://stackoverflow.com/questions/2507808/python-how-to-check-file-empty-or-not/15924160# comment2503155_2507819). – j08lue

6

Ok więc łączę ghostdog74's answer i komentarze, po prostu dla zabawy.

>>> import os 
>>> os.stat('c:/pagefile.sys').st_size==0 
False 

False oznacza nie pusty plik.

Warto więc napisać funkcję:

import os 

def file_is_empty(path): 
    return os.stat(path).st_size==0