2017-11-18 4 views
0

Ich bin ein Anfänger in Python, und ich habe eine Frage zum Lesen von Dateien: Ich muss Informationen in einer Datei verarbeiten, um es in einem anderen zu schreiben. Ich weiß, wie man das macht, aber es ist für meinen Computer wirklich ressourcenintensiv, da die Datei wirklich groß ist, aber ich weiß, wie sie formatiert ist! Die Datei folgt, dass Format:Teilen einer TXT-Datei in mehreren Teilen in Python

4 13 
9 3 4 7 
3 3 3 3 
3 5 2 1 

Ich werde nicht erklären, was es ist, wie es ewig dauern würde und nicht sehr nützlich sein, aber die Datei essentialy von vier Zeilen wie diese gemacht, wieder und nochmal. Denn jetzt, ich benutze diese die Datei und wandeln es in einer sehr langen Kette zu lesen:

inputfile = open("input.txt", "r") 
output = open("output.txt", "w") 
Chain = inputfile.read() 
Chain = Chain.split("\n") 
Chained = ' '.join(Chain) 
Chain = Chained.split(" ") 
Chain = list(map(int, Chain)) 

Danach behandle ich es nur mit „Task-IDs“, aber ich fühle mich wie es wirklich nicht effizient ist. Also wissen Sie, wie ich die Kette in mehrere teilen könnte, wissend, wie sie formatiert sind? Danke fürs Lesen!

Antwort

1

Wie wäre:

res = [] 
with open('file', 'r') as f: 
    for line in f: 
    for num in line.split(' '): 
     res.append(int(num)) 

Anstatt die gesamte Datei in den Speicher zu lesen, gehen Sie Zeile für Zeile. Hilft das?

Wenn Sie 4 Zeilen gleichzeitig brauchen, fügen Sie einfach eine interne Schleife hinzu.

In Bezug auf die Ausgabe nehme ich an, dass Sie einige Berechnungen an der Eingabe vornehmen möchten, also würde ich nicht unbedingt in der gleichen Schleife tun. Bearbeiten Sie die Eingabe entweder nach dem Lesen oder verwenden Sie statt einer Liste eine Warteschlange und lassen Sie einen anderen Thread aus der Warteschlange lesen, während dieser Thread darauf schreibt.

Vielleicht ist der Nutzen einer Liste Verständnis wird auch ein bisschen helfen (ich bezweifle, dass dies ihre Wirkung entfalten wird):

res = [] 
with open('file', 'r') as f: 
    for line in f: 
    res.append(int(num) for num in line.split()) 
+0

Genau das, was ich suchte, danke! –

0

Vielleicht tun Sie es Zeile für Zeile. Auf diese Weise verbraucht es weniger Speicher.

Es ist wahrscheinlich ein Zeilenumbruch Zeichen \n in den Worten. Sie sollten das auch durch eine leere Zeichenfolge ersetzen.

0

Wenn Sie wollen nicht Speicher zu verbrauchen (können Sie Wenn die Datei sehr groß ist, müssen Sie lien für Zeile lesen.

with open('input.txt', 'w') as inputfile, open('"output.txt', 'w') as output: 
    for line in inputfile: 
     chain = line.split(" ") 
     #do some calculations or what ever you need 
     #and write those numbers to new file 
     numbers = list(map(int, chain)) 
     for number in numbers 
      output.write("%d " % number) 
1

hmm gibt es einige Verfahren in eine Datei zu schreiben, ohne sie zu lesen ich glaube

Add text to end of line without loading file

https://docs.python.org/2.7/library/functions.html#print

from __future__ import print_function 
# if you are using python2.7 
i = open("input","r") 
f = open("output.txt","w") 
a = "awesome" 
for line in i: 
    #iterate lines in file input 
    line.strip() 
    #this will remove the \n in the end of the string 
    print(line,end=" ",file=f) 
    #this will write to file output with space at the end of it 

könnte dies helfen, auch ich ein Neuling bin, aber mit besseren google fu XD