2012-04-15 10 views
1

Ich möchte die erste Spalte aus einer Datei entfernen. Die Datei enthält 3 Spalten getrennt durch Leerzeichen und die Spalten haben folgende Titel: X ',' Verschiebung 'und' Kraft '(siehe Bild).Python - So entfernen Sie Spalten aus einer Datei

data file

Ich habe kam mit dem folgenden Code, aber zu meiner Enttäuschung es funktioniert nicht!

f = open("datafile.txt", 'w') 
for line in f: 
    line = line.split() 
    del x[0] 
f.close() 

Jede Hilfe wird sehr geschätzt! Esan

+4

'del x [0]' wirklich? – orlp

+3

Haben Sie tatsächlich die Fehler gelesen, die der Code ausgelöst hat? Ich meine, Sie benutzen '' 'w''' beim Lesen, viele davon ergeben keinen Sinn ... –

Antwort

7

Zuerst versuchen Sie, aus einer Datei zu lesen (indem Sie durch den Dateiinhalt iterieren), die zum Schreiben geöffnet ist. Dies wird Ihnen eine IOError geben.

Zweitens gibt es keine Variable mit dem Namen x (Sie haben im Skript noch keine deklariert/gesetzt). Dies erzeugt eine NameError.

Drittens und schließlich, wenn Sie die Spalten in Ihrer Datei (richtig) gelesen und bearbeitet haben, müssen Sie die Daten wieder in die Datei schreiben.

Um das Laden einer (möglicherweise großen) Datei in den Speicher auf einmal zu vermeiden, ist es wahrscheinlich eine gute Idee, aus einer Datei (zeilenweise) zu lesen und gleichzeitig in eine neue Datei zu schreiben.

So etwas wie dies funktionieren könnte:

f = open("datafile.txt", "r") 
g = open("datafile_fixed.txt", "w") 

for line in f: 
    if line.strip(): 
     g.write("\t".join(line.split()[1:]) + "\n") 

f.close() 
g.close() 
+0

Vielen Dank für Ihre hlep. – Esan

1
print ''.join([' '.join(l.split()[1:]) for l in file('datafile.txt')]) 

oder, wenn Sie möchten, Räume erhalten und Sie wissen, dass die zweite Spalte beginnt immer am, sagen wir, 10. Zeichen:

print ''.join([l[11:] for l in file('datafile.txt')]) 
1

Einige der Lektüre über python i/o könnte hilfreich sein, aber

with open("datafile.txt", "r") as fin: 
    with open("outputfile.txt", "w") as fout: 
     for line in fin: 
      line = line.split(' ') 
      if len(line) == 3: 
       del line[0] 
       fout.write(line[0] + ' ' + line[1]) 
      else: 
       fout.write('\n') 

EDIT: so etwas wie die folgenden sollten Sie auf Ihre Füße fixiert mit Leerzeilen arbeiten

Verwandte Themen