Ich habe eine Textdatei. Wie kann ich prüfen, ob sie leer ist oder nicht?
Antworten
Zu viele Anzeigen?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
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
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 .
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
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()