2013-07-19 19 views
8

Tôi muốn kiểm tra cả tệp có tồn tại hay không, nếu có, nếu nó trống.Cách đúng để kiểm tra tệp trống hoặc thiếu trong Python

Nếu tệp không tồn tại, tôi muốn thoát khỏi chương trình với thông báo lỗi.

Nếu tệp rỗng, tôi muốn thoát bằng một thông báo lỗi khác.

Nếu không, tôi muốn tiếp tục.

Tôi đã đọc về cách sử dụng Thử: Ngoại trừ: nhưng tôi không chắc chắn cách cấu trúc mã 'Pythonically' để đạt được những gì tôi theo sau?


Cảm ơn bạn cho tất cả các câu trả lời, tôi đã đi với đoạn mã sau:

try: 
    if os.stat(URLFilePath + URLFile).st_size > 0: 
     print "Processing..." 
    else: 
     print "Empty URL file ... exiting" 
     sys.exit() 
except OSError: 
    print "URL file missing ... exiting" 
    sys.exit() 
+0

Chỉ cần làm rõ, chương trình đang tải URL từ tệp tôi đang kiểm tra, thực hiện các công cụ với chúng, sau đó xóa tệp bằng cách sử dụng 'open (URLFile,' w '). Close() '. Tôi sẽ chạy chương trình vài phút một lần vì vậy tôi muốn chương trình này thoát ra nếu không có URL mới nào được thêm vào trong thời gian chờ đợi. – TheRogueWolf

+0

có thể trùng lặp của [python cách kiểm tra tệp trống hoặc không] (http://stackoverflow.com/questions/2507808/python-how-to-check-file-empty-or-not) –

+0

Sử dụng ngoại lệ cho dự đoán và tránh được lỗi là lười biếng. Kiểm tra xem tệp có tồn tại hay không và sau đó kiểm tra kích thước của tệp. –

Trả lời

14

Tôi muốn sử dụng os.stat đây :

try: 
    if os.stat(filename).st_size > 0: 
     print "All good" 
    else: 
     print "empty file" 
except OSError: 
    print "No file" 
+0

Đây là giải pháp tốt nhất của IMO. –

+0

những gì về zero byte tập tin? – shookees

+0

@shookees - Hãy tha thứ cho sự thiếu hiểu biết của tôi, nhưng làm thế nào là một tập tin byte không khác với một tập tin rỗng? – mgilson

1

os.path.exists và các chức năng khác trong os.path.

Đối với đọc,

bạn muốn một cái gì đó giống như

if not os.path.exists(path): 
    with open(path) as fi: 
     if not fi.read(3): #avoid reading entire file. 
      print "File is empty" 
1

Làm thế nào về điều này:

try: 
    myfile = open(filename) 
except IOError: # FileNotFoundError in Python 3 
    print "File not found: {}".format(filename) 
    sys.exit() 

contents = myfile.read() 
myfile.close() 

if not contents: 
    print "File is empty!" 
    sys.exit() 
+0

Có phải 'FileNotFoundError' là một thứ không? (nó không phải là cho tôi với python2.7 - Điều đó chỉ làm tăng một 'NameError') Đối với tôi nó là một' IOError'. Ngoài ra, tôi sẽ không khuyến khích đọc toàn bộ tệp (nếu người dùng vô tình cung cấp tệp có dung lượng 8 Gb?) Tôi nghĩ bạn có thể lấy thông tin trống/không trống từ 'os.stat'. – mgilson

+0

@mgilson: Đúng; Tôi đã thử nghiệm 'mở (" blargh ")' trong Python 3 và đã dự kiến ​​ngoại lệ cũng có mặt trong Python 2. Vì vậy, phiên bản trước của tôi đã thực sự đúng :) –

+0

Tốt, tôi đã không nhận ra rằng họ đã phân lớp IOError và tạo FileNotFoundError trong py3k. mát mẻ. – mgilson

0

Hãy thử điều này:

import os 
import sys 

try: 
    s = os.stat(filename) 
    if s.st_size == 0: 
     print "The file {} is empty".format(filename) 
     sys.exit(1) 
except OSError as e: 
    print e 
    sys.exit(2) 
Các vấn đề liên quan