Tôi có một tập tin văn bản.
Làm thế nào tôi có thể kiểm tra xem nó trống hay không?
Tôi có một tập tin văn bản.
Làm thế nào tôi có thể kiểm tra xem nó trống hay không?
Câu trả lời:
>>> import os
>>> os.stat("file").st_size == 0
True
import os
os.path.getsize(fullpathhere) > 0
OSError
và trả lại Sai.
Cả hai getsize()
và stat()
sẽ ném một ngoại lệ nếu tập tin không tồn tại. Hàm này sẽ trả về Đúng / Sai mà không cần ném (đơn giản hơn nhưng kém mạnh mẽ hơn):
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)
và os.path.getsize(fpath)
, trong trường hợp đó, chức năng được đề xuất sẽ đưa ra một ngoại lệ.
OSError
thay vào đó, như đề xuất trong một bình luận khác .
TypeError
được sẽ được nâng lên trong trường hợp đường dẫn đầu vào là None
.
nếu vì lý do nào đó bạn đã mở tệp, bạn có thể thử điều này:
>>> 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
Ok vì vậy tôi sẽ kết hợp câu trả lời của ghostdog74 và các bình luận, chỉ để cho vui.
>>> import os
>>> os.stat('c:/pagefile.sys').st_size==0
False
False
có nghĩa là một tập tin không trống.
Vì vậy, hãy viết một hàm:
import os
def file_is_empty(path):
return os.stat(path).st_size==0
Nếu bạn đang sử dụng Python3, pathlib
bạn có thể truy cập os.stat()
thông tin bằng Path.stat()
phương thức có thuộc tính st_size
(kích thước tệp theo byte):
>>> from pathlib import Path
>>> mypath = Path("path/to/my/file")
>>> mypath.stat().st_size == 0 # True if empty
nếu bạn có đối tượng tập tin, thì
>>> 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
Một gotcha quan trọng: một tệp trống được nén sẽ xuất hiện khác không khi được kiểm tra với getsize()
hoặc các stat()
hàm:
$ 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
Vì vậy, bạn nên kiểm tra xem tệp cần kiểm tra có bị nén hay không (ví dụ: kiểm tra hậu tố tên tệp) và nếu vậy, hãy bảo lãnh hoặc giải nén nó đến một vị trí tạm thời, kiểm tra tệp không nén, sau đó xóa tệp khi hoàn tất.
Vì bạn chưa định nghĩa tập tin trống là gì. Một số có thể coi một tệp chỉ có các dòng trống cũng là một tệp trống. Vì vậy, nếu bạn muốn kiểm tra xem tệp của bạn chỉ chứa các dòng trống (bất kỳ ký tự khoảng trắng nào, '\ r', '\ n', '\ t') , bạn có thể làm theo ví dụ dưới đây:
Python3
import re
def whitespace_only(file):
content = open(file, 'r').read()
if re.search(r'^\s*$', content):
return True
Giải thích: ví dụ trên sử dụng biểu thức chính quy (regex) để khớp với nội dung ( content
) của tệp.
Cụ thể: đối với regex của: ^\s*$
như toàn bộ phương tiện nếu tệp chỉ chứa các dòng trống và / hoặc khoảng trắng.
- ^
khẳng định vị trí khi bắt đầu một dòng
- \s
khớp với bất kỳ ký tự khoảng trắng nào (bằng [\ r \ n \ t \ f \ v])
- Bộ *
định lượng - Ghép giữa số 0 và số lần không giới hạn, nhiều lần nhất có thể, trả lại khi cần ( tham lam)
- $
khẳng định vị trí ở cuối dòng
nếu bạn muốn kiểm tra tập tin csv có trống hay không ....... hãy thử điều này
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
thay vì 6