ফাইল খালি আছে কিনা তা কীভাবে পরীক্ষা করবেন?


279

আমার কাছে একটি টেক্সট ফাইল আছে।
এটি খালি আছে কিনা তা আমি কীভাবে পরীক্ষা করতে পারি?

উত্তর:


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

11
stat.ST_SIZE6
wRAR

2
এটাও ঠিক আছে। তবে আমি স্ট্যাটটি আমদানি করতে চাই না। এটির সংক্ষিপ্ত এবং যথেষ্ট মিষ্টি এবং প্রত্যাবর্তিত তালিকার আকারের অবস্থানটি শীঘ্রই খুব শীঘ্রই পরিবর্তিত হবে না।
ghostdog74

61
@WRAR: os.stat ('file')। st_size আরও ভাল
ড্যানিয়েল স্টুটজবাচ

2
নোট করুন যে ফাইল প্রকারগুলি json এর জন্যও কাজ করে। কখনও কখনও, খালি ফাইলের জন্য json.load () কাজ করে না এবং এটি কেস পরিচালনা করার জন্য একটি ভাল উপায় সরবরাহ করে
seokhoonlee

যদি ফাইলটিতে কেবল নতুন লাইন থাকে / খালি থাকে? ভুল উত্তর!
আবদুল্লাহ বলেছেন

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

8
সুরক্ষার জন্য আপনাকে OSErrorমিথ্যা ধরতে হবে এবং ফিরে আসতে হবে।
কেনেটিএম

5
এই বনাম os.state ('ফাইল') ব্যবহার করে পার্থক্য / সুবিধা কী? St_size?
এলিজা লিন

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পরিবর্তে চেষ্টা করা এবং ধরা আরও ভাল , অন্য মন্তব্যে প্রস্তাবিত মত ।
j08lue

TypeErrorইনপুট এফপ্যাথ হলে ইভেন্টটি উত্থাপিত হবে তা ধরতে হবে None
ট্রুটান

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

ঠিক আছে তাই আমি ভোগের জন্য ঘোস্টডোগ 74 এর উত্তর এবং মন্তব্যগুলিকে একত্রিত করব ।

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

আপনি যদি পাইথন 3 ব্যবহার করে থাকেন তবে আপনি পদ্ধতিটি ব্যবহার করে তথ্য 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', 'contains t') রয়েছে কিনা তা পরীক্ষা করতে চান তবে নীচের উদাহরণটি অনুসরণ করতে পারেন:

Python3

import re

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

ব্যাখ্যা করুন: উপরের উদাহরণটি contentফাইলের সামগ্রী ( ) এর সাথে মেলে নিয়মিত অভিব্যক্তি (রেজেক্স) ব্যবহার করে।
বিশেষত: এর রেজেক্সের জন্য: ^\s*$পুরো অর্থ হিসাবে যদি ফাইলটিতে কেবল ফাঁকা লাইন এবং / অথবা ফাঁকা স্থান থাকে।
- ^একটি লাইন শুরুতে অবস্থান দাবি
- \sকোনো হোয়াইটস্পেস অক্ষর মিলে যায় (সমান [পান \ r \ n \ n টি \ চ \ বনাম])
- *কোয়ান্টিফায়ার - শূন্য এবং সীমাহীন বার মধ্যে খেলা, সম্ভব হিসাবে অনেক বার হিসাবে প্রয়োজন ফেরৎ হিসাবে ( লোভী)
- $একটি লাইনের শেষে অবস্থান জোর করে


0

আপনি যদি সিএসভি ফাইলটি খালি কিনা তা পরীক্ষা করতে চান তবে ....... এটি চেষ্টা করে দেখুন

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
স্ট্যাক ওভারফ্লোতে স্বাগতম Welcome কীভাবে একটি ভাল উত্তর লিখতে হয় তা দয়া করে আপনার উত্তরটিকে উন্নত করুন ।
নরেশ কুমার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.