ฉันมีไฟล์ข้อความ
ฉันจะตรวจสอบได้ว่าว่างเปล่าหรือไม่?
ฉันมีไฟล์ข้อความ
ฉันจะตรวจสอบได้ว่าว่างเปล่าหรือไม่?
คำตอบ:
>>> import os
>>> os.stat("file").st_size == 0
True
import os
os.path.getsize(fullpathhere) > 0
OSError
และคืนค่าเท็จ
ทั้งสองgetsize()
และstat()
จะโยนข้อยกเว้นหากไฟล์ไม่มีอยู่ ฟังก์ชั่นนี้จะคืนค่าจริง / เท็จโดยไม่ทิ้ง (ง่ายกว่า แต่แข็งแกร่งน้อยกว่า):
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)
และos.path.getsize(fpath)
ในกรณีนี้ฟังก์ชั่นที่เสนอจะเพิ่มข้อยกเว้น
TypeError
ซึ่งจะได้รับการเลี้ยงดูในกรณีที่ fpath None
เข้าเป็น
หากด้วยเหตุผลบางอย่างที่คุณมีไฟล์เปิดอยู่คุณสามารถลองทำสิ่งนี้:
>>> 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
ตกลงดังนั้นฉันจะรวมคำตอบของ 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
หากคุณใช้ 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
หากคุณมีวัตถุไฟล์แล้ว
>>> 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
gotcha สำคัญ: ไฟล์ว่างที่ถูกบีบอัดจะปรากฏเป็นไม่เป็นศูนย์เมื่อทดสอบด้วย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
ดังนั้นคุณควรตรวจสอบว่าไฟล์ที่จะทดสอบนั้นถูกบีบอัดหรือไม่ (เช่นตรวจสอบคำต่อท้ายชื่อไฟล์) และถ้าเป็นเช่นนั้นการประกันตัวหรือคลายการบีบอัดไปยังตำแหน่งชั่วคราวให้ทดสอบไฟล์ที่ไม่บีบอัดแล้วลบออกเมื่อเสร็จสิ้น
เนื่องจากคุณยังไม่ได้กำหนดว่าไฟล์เปล่าคืออะไร บางคนอาจพิจารณาไฟล์ที่มีเพียงบรรทัดว่างและไฟล์เปล่า ดังนั้นหากคุณต้องการตรวจสอบว่าไฟล์ของคุณมีเพียงบรรทัดว่าง (อักขระช่องว่างใด ๆ , '\ r', '\ n', '\ t')คุณสามารถทำตามตัวอย่างด้านล่าง:
Python3
import re
def whitespace_only(file):
content = open(file, 'r').read()
if re.search(r'^\s*$', content):
return True
อธิบาย: ตัวอย่างข้างต้นใช้นิพจน์ทั่วไป (regex) เพื่อจับคู่เนื้อหา ( content
) ของไฟล์
โดยเฉพาะ: สำหรับ regex ของ: ^\s*$
โดยรวมหมายถึงถ้าไฟล์มีเพียงบรรทัดว่างและ / หรือช่องว่าง
- ^
ยืนยันตำแหน่งที่จุดเริ่มต้นของบรรทัด
- \s
จับคู่อักขระช่องว่างใด ๆ (เท่ากับ [\ r \ n \ t \ f \ v])
- *
ตัวนับ - จับคู่ระหว่างศูนย์และเวลาไม่ จำกัด เท่าที่เป็นไปได้ให้กลับมาเท่าที่จำเป็น ( โลภ)
- $
ยืนยันตำแหน่งที่ส่วนท้ายของบรรทัด
หากคุณต้องการตรวจสอบไฟล์ 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()
stat.ST_SIZE
แทน 6