Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Entfernen Sie die leere Zeile, die mit Python aus der Ausgabe der Hive-Abfrage gedruckt wurde

Normalerweise würden Sie die Eingabedatei öffnen und die nicht leeren Zeilen in eine zweite Datei schreiben:

with open('file.tsv') as infile, open('filtered_file.tsv', 'w') as outfile:
    for line in infile:
        if line.strip():
            outfile.write(line)

Wenn Sie die Datei direkt filtern möchten, können Sie FileInput verwenden mit dem inplace Möglichkeit:

import fileinput
for line in fileinput.FileInput("infile", inplace=1):
    if line.strip():
        print line

Dies verwendet jedoch eine Zwischendatei und funktioniert möglicherweise nicht in Situationen mit wenig Speicherplatz.

Um die Datei an Ort und Stelle zu filtern, ohne zusätzlichen Speicherplatz zuzuweisen, könnten Sie Folgendes versuchen:

with open('file.tsv', 'r+') as infile:
    read_pos = write_pos = 0
    line = infile.readline()
    while line:
        read_pos += len(line)
        if line.strip():
            infile.seek(write_pos)
            infile.write(line)
            write_pos += len(line)
        infile.seek(read_pos)
        line = infile.readline()
    # update file size to the new, possibly reduced, size
    infile.truncate(write_pos)