Seite 1 von 1
Zeile aus txt file löschen
Verfasst: Freitag 15. Dezember 2017, 22:15
von Yoqora
Hallo,
ich habe ein .txt file, in dem folgendes steht:
Also in der ersten Zeile steht nichts.. geht es irgendwie, dass ich diese Zeile lösche, also sozusagen alle Zeilen um eine nach vorne verschiebe?
oder ist das nicht möglich? Ich möchte nämlich aus diesen Daten einen Graph mit matplotlib erstellen und wenn in der Zeile nichts steht bekomme
ich den Error "list index out of range". Sobald die erste Zeile nicht mehr frei ist, geht es. Also kann ich das irgendwie machen?
Re: Zeile aus txt file löschen
Verfasst: Freitag 15. Dezember 2017, 22:45
von __deets__
Ja. Du musst die Datei zeilenweise einlesen. Mit der strip Methode entfernst du whitespace, womit eine solche Zeile leer wird. Dann behältst du nur die nicht-leeren Zeilen. Und schreibst die weg oder benutzt io.StringIO um eine Datei zu simulieren.
Re: Zeile aus txt file löschen
Verfasst: Freitag 15. Dezember 2017, 23:21
von pixewakb
Ich weiß nicht, was du brauchst, einfach mal etwas Quellcode - Ansatz 1 würde ich wahrscheinlich nutzen, wenn die Datei genauso aussieht, wie du schreibst:
Code: Alles auswählen
# Ansatz 1
with open("source.txt") as f:
rawdata = f.readlines()[1:]
data = [list(map(int, item.split(","))) for item in rawdata]
# Ansatz 2
with open("source.txt") as f:
rawdata = f.readlines()
data = []
for line in rawdata:
if line == "\n":
pass
else:
line = line.strip("\n")
column1, column2 = line.split(",")
data.append([column1, int(column2)])
print(data)
# Ansatz 3
with open("source.txt") as f:
rawdata = f.readlines()
data = []
for i, line in enumerate(rawdata):
if i >= 1:
line = line.strip("\n")
column1, column2 = line.split(",")
data.append([column1, int(column2)])
print(data)
Bei Ansatz 2 nutze ich eine konkrete Abfrage, welche Zeilen ich überspringen will. Bei Ansatz 3 verlasse ich mich darauf, dass es tatsächlich um die erste Zeile geht.
Hast du überlegt von .txt auf .csv zu wechseln? In der Standardbibliothek gibt es das csv-Modul, dass das Arbeiten mit csv-Dateien erleichtert. Deine Daten sehen aus wie csv...
Re: Zeile aus txt file löschen
Verfasst: Freitag 15. Dezember 2017, 23:39
von __deets__
@pixewakb das csv Modul kümmert sich nicht um die dateiendung. Testen auf „not line.strip()“ ist deinem Vergleich mit einem newline überlegen weil es auch Leerzeichen oder \r eliminiert. Und alles per Readlines einzulesen um danach über eben diese zu iterieren ist eigentlich überflüssig.
Re: Zeile aus txt file löschen
Verfasst: Samstag 16. Dezember 2017, 12:38
von Sirius3
@Yoqora: normalerweise zeigt man, was man versucht hat, und wo man konkret scheitert. numy.genfromtxt kennt z.B. ein `skiprows`. Bei File-Objekten kann man mit `header = next(lines)` eine einzelne Zeile lesen.
@pixewakb: bei Iteratoren kann man auch mit `islice` bestimmte Bereiche selectieren.