2010-03-24 85 views

回答

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

'stat.ST_SIZE'而不是6 – wRAR 2010-03-24 13:37:11

+1

這也沒關係。但我不想導入統計。它的短小和甜蜜,以及返回列表中的大小位置不會很快改變。 – ghostdog74 2010-03-24 13:48:56

+48

@wRAR:os.stat('file')。st_size更好 – 2010-03-24 15:16:50

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

爲了安全起見,您可能需要趕'OSError'並返回false。 – kennytm 2010-03-24 13:09:18

+3

使用vs vs.state('file')有什麼區別/優點。st_size? – 2017-11-25 00:30:11

+0

看起來像兩個是在引擎蓋下相同:https://stackoverflow.com/a/18962257/1397061 – 2018-02-07 06:29:59

16

如果由於某種原因,你已經有文件打開,你可以試試這個:

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

兩個getsize()stat()將拋出一個異常,如果該文件不存在。這個函數將返回真/假不拋出:

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

絕對像使用''os.path.getsize()'' – 2013-11-19 22:05:35

+3

有一個競爭條件,因爲文件可能是在對'os.path.isfile(fpath)'和'os.path.getsize(fpath)'的調用之間移除,在這種情況下,建議的函數會引發異常。 – s3rvac 2017-05-04 09:10:27

+1

更好地嘗試和趕上'OSError',而不是像[另一評論]中提出的(http://stackoverflow.com/questions/2507808/python-how-to-check-file-empty-or-not/15924160# comment2503155_2507819)。 – j08lue 2017-05-04 13:23:15

6

好了,所以我會結合ghostdog74's answer和意見,只是爲了好玩。

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