/ / Python: Lesen und schreiben Textdatei mit Header und numerischen Spalten [geschlossen] - Python, Datei, CSV

Python: Lesen und schreiben Textdatei mit Header und numerischen Spalten [geschlossen] - Python, Datei, CSV

Ich habe eine Textdatei, die einige Überschriftenzeilen und einige Spalten (Zahlen) hat. Ich möchte diese Datei lesen, indem ich den Header überspringe, und dann einige Spalten und auswählen schreibe sie mit einem Python-Skript in eine neue Datei.

Zum Beispiel können wir die Daten unten aufrufen in_table.txt. Ich möchte den Header überspringen (auch die Leerzeilen), Wählen Sie dann die erste und vierte Spalte (nur die numerischen Werte) und speichern Sie sie in einer neuen Datei out_table.txt ohne Header, nur Zahlen. Wie kann ich das mit einem Python-Skript tun?

Danke vielmals!!

in_tabelle.txt:

hline1 hline1 hline1
hline2 hline2 hline2

hline3 hline3 hline3

par1  par2  par3  par4  par5
1.    10.   100.  1000. 10000.
2.    20.   200.  2000. 20000.
3.    30.   300.  3000. 30000.
4.    40.   400.  4000. 40000.
5.    50.   500.  5000. 50000.

.

Antworten:

2 für die Antwort № 1

Wenn Sie mit Leerzeichenbegrenzern festhalten, verwenden Sie

with open("in_table.txt") as f:
# Iterate through the file until the table starts
for line in f:
if line.startswith("------"):
break
# Read the rest of the data, using spaces to split.
data = [r.split() for r in f]

with open("out_file.csv", "w") as of:
for r in data:
# Write only column 0 and 2 (re: 0-indexing)
of.write("%s, %sn"%(r[0], r[2]))

CSV

Wenn Sie mit Kommas abgrenzen, könnten Sie wahrscheinlich Pythons eingebaut haben csv Bibliothek

import csv
with open("in_table.txt") as f:
for line in f:
if line.startswith("------"):
break
data = [r for r in csv.reader(f)]

with open("out_file.csv", "w") as of:
for r in data:
of.write("%s, %sn"%(r[0], r[2]))

oder vielleicht prägnanter

import csv
with open("in_table.txt") as f:
for line in f:
if line.startswith("------"):
break
data = [r[0]+r[2] for r in csv.reader(f)]

wrt = csv.writer(open("out_file.csv", "w"))
wrt.writerows(data)