411 Stimmen

Wie prüft man, ob eine Datei leer ist oder nicht?

Ich habe eine Textdatei. Wie kann ich prüfen, ob sie leer ist oder nicht?

17voto

Qlimax Punkte 5081

Wenn Sie das Dateiobjekt haben, dann

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

12voto

Ron Klein Punkte 8860

Kombinieren ghostdog74's Antwort und die Kommentare:

>>> import os
>>> os.stat('c:/pagefile.sys').st_size==0
False

False bedeutet eine nicht leere Datei.

Lassen Sie uns also eine Funktion schreiben:

import os

def file_is_empty(path):
    return os.stat(path).st_size==0

4voto

Trutane Punkte 1140

Ein wichtiges Hindernis: ein komprimierte leere Datei wird als ungleich Null erscheinen, wenn sie mit getsize() ou stat() Funktionen:

$ 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

Prüfen Sie also, ob die zu testende Datei komprimiert ist (z. B. anhand der Dateinamensendung), und wenn ja, sichern oder dekomprimieren Sie sie an einem temporären Ort, testen Sie die unkomprimierte Datei und löschen Sie sie anschließend.

Bessere Möglichkeit, die Größe von komprimierten Dateien zu testen : Lesen Sie es direkt mit das entsprechende Kompressionsmodul . Sie bräuchten nur die erste Zeile der Datei zu lesen, zum Beispiel .

3voto

KV88 Punkte 304

Da Sie nicht definiert haben, was eine leere Datei ist: Einige könnten auch eine Datei mit nur leeren Zeilen als leere Datei betrachten. Wenn Sie also prüfen wollen, ob Ihre Datei enthält nur Leerzeilen (alle Leerzeichen, ' \r ', ' \n ', ' \t ') können Sie dem nachstehenden Beispiel folgen:

Python 3

import re

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

Erläuterung: Im obigen Beispiel wird ein regulärer Ausdruck (regex) verwendet, um den Inhalt ( content ) der Datei.

Genauer gesagt: für eine Regex von: ^\s*$ als Ganzes bedeutet, wenn die Datei nur Leerzeilen und/oder Leerzeichen enthält.

  • ^ bestätigt die Position am Anfang einer Zeile
  • \s passt auf jedes beliebige Leerzeichen (gleich [ \r\n\t\f\v ])
  • * Quantifizierer - Stimmt zwischen null und unbegrenzt oft überein, so oft wie möglich, und gibt so viel zurück wie nötig (gierig)
  • $ bestätigt die Position am Ende einer Zeile

1voto

Rajan Singh Punkte 1

Wenn Sie prüfen möchten, ob eine CSV-Datei leer ist oder nicht ist, versuchen Sie dies:

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X