Python liest eine datei, speichere eine neue spalte für jede zeilenanzeige die gleiche datei speichern

Ich habe eine Datei mit x, y, z-Werten. Ich möchte eine elegante Art zu öffnen und fügen Sie eine neue Wert-ID zu jeder Zeile und speichern Sie wieder die gleiche Datei zu finden.

def get_point_grid_id(x,y,x_min,y_max,x_dist,y_dist): col = int((x - x_min)/x_dist) row = int((y_max - y)/y_dist) return (row, col) 

Ex

 1 1 10 2 2 10 3 3 10 

Die ID wird sein

 get_point_grid_id(1,1,0,10,1,1) (9, 1) get_point_grid_id(2,2,0,10,1,1) (8, 2) get_point_grid_id(3,3,0,10,1,1) (7, 3) 

Die neue Datei wird sein

 1 1 10 (9, 1) 2 2 10 (8, 2) 3 3 10 (7, 3) 

Ich lese in Stackoverflow mehrere Ansatz und ich habe mehrere Ansätze getestet. Ich bin ehrlich zu sagen, dass ich versucht habe und es versäumt habe, die neue Datei zu speichern.

Ich hatte die folgende Lösung ausprobiert

 with open(file_temp, "r+") as f: for line in open(file_temp): x,y,z = line.split() id = get_point_grid_id(float(x),float(y),0,10,1,1) element = [x,y,z,id] newelement = " ".join([str(e) for e in element])+ "\n" f.write(newelement) 

Aber ich bekomme diese Fehlermeldung

 Traceback (most recent call last): File "<editor selection>", line 3, in <module> ValueError: too many values to unpack 

Wo Neuwert (reale Daten) ist

 '481499.55 6244324.75 19.15 (377, 2909)\n' 

One Solution collect form web for “Python liest eine datei, speichere eine neue spalte für jede zeilenanzeige die gleiche datei speichern”

Sie können das erforderliche Verhalten über das fileinput Modul emulieren, aber bedenken Sie, dass es eine Sicherungskopie Ihrer original 10GB + Datei im Hintergrund erstellen wird:

 #! /usr/bin/env python import fileinput def get_point_grid_id(x,y,x_min,y_max,x_dist,y_dist): col = int((x - x_min)/x_dist) row = int((y_max - y)/y_dist) return (row, col) input_file = "test.dat" # # Add mode='rb' to the arguments of fileinput.input() if you are # using a binary file on operating systems that differentiate # between binary and text files (eg Microsoft Windows). # for line in fileinput.input(input_file, inplace=True): columns = line.split() if 3 == len(columns): x, y, z = columns id = get_point_grid_id(float(x),float(y),0,10,1,1) print "{0} {1} {2} {3}".format(x, y, z, id) 

Der inplace Parameter, der an fileinput.input löst die Magie aus.

Python ist die beste Programmiersprache der Welt.