2013-07-19 10 views
8

Chcę sprawdzić, czy plik istnieje, a jeśli tak, czy jest pusty.Prawidłowy sposób sprawdzania pustego lub brakującego pliku w Pythonie

Jeśli plik nie istnieje, chcę zamknąć program z komunikatem o błędzie.

Jeśli plik jest pusty, chcę zakończyć z innym komunikatem o błędzie.

W przeciwnym razie chcę kontynuować.

Czytałem o użyciu Try: Z wyjątkiem: ale nie jestem pewien, jak skonstruować kod "Pythonically", aby osiągnąć to, co jestem po?


Dziękuję za wszystkie odpowiedzi, poszedłem z następującego kodu:

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

Aby wyjaśnić, program ładuje adresy URL z pliku, który sprawdzam, robiąc z nimi pliki, a następnie wyzerowuje plik za pomocą 'open (URLFile, 'w'). Close()'. Mam zamiar uruchamiać program co kilka minut, więc chcę go zakończyć, jeśli w międzyczasie nie dodano żadnych nowych adresów URL. – TheRogueWolf

+0

możliwy duplikat [python jak sprawdzić plik pusty lub nie] (http://stackoverflow.com/questions/2507808/python-how-to-check-file-empty- or-not) –

+0

Używanie wyjątków dla przewidywalnych i możliwych do uniknięcia błędy są leniwy. Sprawdź, czy plik istnieje, a jeśli tak, sprawdź jego rozmiar. –

Odpowiedz

14

użyję os.stat tutaj :

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

To jest IMO najlepszym rozwiązaniem. –

+0

co z plikami z zerowym bajtem? – shookees

+0

@Shookees - Wybacz moją ignorancję, ale w jaki sposób plik zerowy bajt różni się od pustego pliku? – mgilson

1

os.path.exists i inne funkcje w os.path.

Co do czytania,

chcesz coś

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

Jak o tym:

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

Czy coś jest "FileNotFoundError"? (nie jest to dla mnie z python2.7 - To tylko podnosi "NameError") Dla mnie jest to "IOError". Ponadto zniechęciłbym się do czytania całego pliku (co jeśli użytkownik przypadkowo dostarczy plik o wielkości 8 GB?) Myślę, że możesz pobrać puste/niepuste informacje z 'os.stat'. – mgilson

+0

@mgilson: Right; Testowałem 'open (" blargh ")' w Pythonie 3 i oczekiwałem, że wyjątek będzie obecny również w Pythonie 2. Moja poprzednia wersja była poprawna :) –

+0

Miło, nie zdawałem sobie sprawy z tego, że podklasowali IOError i utworzyli FileNotFoundError w py3k. chłodny. – mgilson

0

Spróbuj tego:

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) 
Powiązane problemy