कैसे जांचें कि कोई फाइल खाली है या नहीं?


जवाबों:


348
>>> import os
>>> os.stat("file").st_size == 0
True

11
stat.ST_SIZE6 के बजाय
wRAR

2
वह भी ठीक है। लेकिन मैं स्टेट को आयात नहीं करना चाहता। इसकी छोटी और मीठी पर्याप्त और लौटी सूची में आकार की स्थिति कभी भी जल्द ही बदलने वाली नहीं है।
भूतडॉग ghost

61
@WRAR: os.stat ('फ़ाइल')। st_size और भी बेहतर है
डैनियल स्टुट्ज़बैच

2
ध्यान दें कि फ़ाइल प्रकार json के लिए भी काम करते हैं। कभी-कभी, खाली फ़ाइल के लिए json.load () काम नहीं करता है और यह उस मामले को संभालने का एक अच्छा तरीका प्रदान करता है
seokhoonlee

क्या होगा यदि फ़ाइल में केवल नई लाइन / खाली हो? गलत जवाब!
अब्दुल्ला ने

121
import os    
os.path.getsize(fullpathhere) > 0

8
सुरक्षा के लिए आपको OSErrorगलत को पकड़ने और वापस करने की आवश्यकता हो सकती है ।
kennytm

5
इस बनाम os.state ('फ़ाइल') का उपयोग करने से क्या अंतर / लाभ होता है।
एलिजा लिन

2
ऐसा लगता है कि दोनों हुड के नीचे समान हैं: stackoverflow.com/a/18962257/1397061
1 ''

क्या मैं इसे फ़ोल्डर पथों के लिए लागू कर सकता हूं? @Jon
alper

71

दोनों getsize()और stat()यदि फ़ाइल मौजूद नहीं है एक अपवाद फेंक देते हैं। यह फंक्शन ट्रू / फाल्स को बिना फेंके लौटा देगा (सरल लेकिन कम मजबूत):

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

निश्चित रूप से उपयोग करना पसंद हैos.path.getsize()
डेविड गे

9
एक दौड़ की स्थिति है क्योंकि कॉल को कॉल के बीच में os.path.isfile(fpath)और हटाया जा सकता है os.path.getsize(fpath), जिस स्थिति में प्रस्तावित फ़ंक्शन अपवाद को बढ़ाएगा।
s3rvac

3
OSErrorइसके बजाय कोशिश करना और पकड़ना बेहतर है , जैसे एक अन्य टिप्पणी में प्रस्तावित है
०३:०३

इसके अलावा पकड़ने की जरूरत है TypeErrorजो घटना में उठाया जाएगा कि इनपुट fpath है None
Trutane

25

अगर किसी कारण से आपके पास पहले से ही फाइल खुली है तो आप यह कोशिश कर सकते हैं:

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

9

ठीक है तो मैं सिर्फ मनोरंजन के लिए 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

8

यदि आप 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

4

यदि आपके पास फ़ाइल ऑब्जेक्ट है, तो

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

इस उत्तर में अधिक वोट होने चाहिए क्योंकि यह वास्तव में जांचता है कि फ़ाइल में कोई सामग्री है या नहीं।
अमनब

1

एक महत्वपूर्ण गोत्र: एक संपीड़ित खाली फ़ाइल गैर-शून्य दिखाई देगी जब परीक्षण 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

इसलिए आपको जांचना चाहिए कि क्या परीक्षण की जाने वाली फाइल संपीड़ित है (जैसे फ़ाइल नाम प्रत्यय की जांच) और यदि ऐसा है, तो या तो इसे जमानत दें या इसे एक अस्थायी स्थान पर अनलॉक्ड करें, असम्पीडित फ़ाइल का परीक्षण करें, और फिर इसे हटाए जाने पर हटा दें।


1

चूंकि आपने परिभाषित नहीं किया है कि एक खाली फाइल क्या है। कुछ सिर्फ खाली लाइनों के साथ एक फ़ाइल भी एक खाली फ़ाइल पर विचार कर सकते हैं। इसलिए यदि आप जांचना चाहते हैं कि क्या आपकी फ़ाइल में केवल रिक्त लाइनें (कोई भी व्हाट्सएप चरित्र, '\ r', '\ n', 't') हैं , तो आप नीचे दिए गए उदाहरण का अनुसरण कर सकते हैं:

python3

import re

def whitespace_only(file):
    content = open(file, 'r').read()
    if re.search(r'^\s*$', content):
        return True

समझाएं: ऊपर दिया गया उदाहरण contentफ़ाइल की सामग्री ( ) से मेल खाने के लिए नियमित अभिव्यक्ति (रेगेक्स) का उपयोग करता है ।
विशेष रूप से: के regex के लिए: ^\s*$एक पूरे साधन के रूप में अगर फ़ाइल में केवल रिक्त लाइनें और / या रिक्त स्थान हैं।
- ^एक पंक्ति की शुरुआत में स्थिति का पता लगाता है
- \sकिसी भी व्हाट्सएप चरित्र से मेल खाता है ([\ r \ n \ t \ f \ v] के बराबर)
- *क्वांटिफायर - शून्य और असीमित समय के बीच मेल खाता है, जितनी बार संभव हो, वापस दे रहा है (आवश्यकतानुसार) लालची)
- $एक पंक्ति के अंत में स्थिति का दावा करता है


0

अगर आप देखना चाहते हैं कि 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()

1
स्टैक ओवरफ्लो में आपका स्वागत है। कृपया एक अच्छा उत्तर लिखने के तरीके को पढ़कर अपने उत्तर में सुधार करें ।
नरेश कुमार
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.