Ich habe das Verhalten von subprocess.Popen
gelernt, also vergiss es nicht.
Wenn ich mit großen Dateien in Python arbeite, verwende ich sehr oft Iteratoren, um sequentielle Verarbeitung durchzuführen, damit ich nicht alles in den Speicher lege. Die Funktion "sortiert ()" kann jedoch nicht für große Dateien verwendet werden. Dies liegt daran, dass der Iterator vor der Verarbeitung in eine Liste konvertiert wird.
Wenn Sie eine große Datei sortieren möchten, verwenden Sie sort auf der Unix-Systemseite.
import subprocess
def sorted_file_generator(filename):
proc = subprocess.Popen(['sort', filename], stdout=subprocess.PIPE)
while True: #Empfangen Sie Zeile für Zeile mit while
line = proc.stdout.readline()
if line:
yield line.decode('utf-8').strip() #Da der Rückgabewert ein Bytecode ist, dekodieren Sie ihn
else:
break
Dieses Beispiel ist python3. Im Fall von 2 sollte die Behandlung von Bytes unterschiedlich sein
Recommended Posts