Ich habe zwei Programme, die genau das tun, was ich will. Ich versuche, sie zu einem einzigen Programm zusammenzufassen, und hier brauche ich Unterstützung.Lesen, verarbeiten und schreiben Sie eine Datei in Chunks
Programm # 1 liest eine ganze Datei, readlines(), verarbeitet sie und schreibt dann die Daten in eine neue Datei. Funktioniert perfekt.
Code:
datafile = "d:\\python\\workbook\\countries-raw.txt"
with open(datafile, "r") as file:
content = file.readlines()
content = [i.strip('\n') for i in content if '\n' in i]
content = [i for i in content if i != ""]
content = [i for i in content if i != "Top of Page"]
content = [i for i in content if len(i) != 1]
print(content)
newfile = "d:\\python\\workbook\\countries-raw-2.txt"
with open(newfile, "w") as file2:
for i in content:
file2.write(i + '\n')
Programm # 2 liest eine Datei in Blöcken, X Zeilen gleichzeitig. Es druckt dann die Daten X Zeilen auf einmal. Es funktioniert auch genau wie beabsichtigt.
Code mit Beispielausgabe:
textfile = "d:\\mark\\python\\test.txt"
def read_n(file, x):
with open(file, mode='r') as fh:
while True:
data = ''.join(fh.readline() for _ in range(x))
if not data:
break
yield data
for nlines in read_n(textfile, 5):
print(nlines)
'''
abc
123
def
456
ghi
789
jkl
abc
123
def
456
ghi
789
jkl
abc
123
def
456
ghi
789
jkl
abc
123
def
456
ghi
789
jkl
'''
Was ich will, ist ihre Funktionalität zu kombinieren. Angenommen, ich muss eine Datei mit mehr als 20 Millionen (oder mehr) Zeilen Text verarbeiten. Ich kann möglicherweise nicht in der gesamten Datei einlesen und eine riesige Liste wie in Programm # 1 erstellen.
Doch dies scheint, wie es unnötig langsam sein würde:
liest in einer Zeile. Verarbeiten Sie die Linie. Schreiben Sie die Zeile. Wiederholen, bis die gesamte Datei verarbeitet wurde.
ich mein zweites Programm Denken Logik groß wäre hier:
lesen in X-Linien. Verarbeiten Sie alle X-Zeilen. Schreibe die Zeilen (darf nicht genau X sein, je nachdem, was ich gerade mache). Wiederholen, bis die gesamte Datei verarbeitet wurde.
Das ist, was ich habe, aber es funktioniert nicht: (. HINWEIS Sie den Inhalt in der Liste [content] korrekt sind nach dem letzten Verständnis verarbeitet wird)
textfile = "d:\\python\\workbook\\countries-raw.txt"
newfile = "d:\\python\\workbook\\temp-2.txt"
def read_n(file, x):
with open(file, mode='r') as fh:
while True:
data = ''.join(fh.readline() for _ in range(x))
content = data.split('\n')
content = [i for i in content if i != ""]
content = [i for i in content if i != "Top of Page"]
content = [i for i in content if len(i) != 1]
if not content:
break
yield content
for nlines in read_n(textfile, 50):
with open(newfile, "w") as file2:
for item in content:
content.write(item + '\n')
print(nlines)
Zumindest ich eine Scoping-Ausgabe haben weil PyCharm sagt "Inhalt" ist unbekannt in der unteren Druckabteilung. Außerdem, wenn möglich, wenn die Datei geschrieben wird, möchte ich keine Leerzeichen zwischen den Daten, wie es in der Ausgabe von Programm # 2 erscheint.