Hallo
ich möchte ein script schreiben, welches ich als "Datei-Parser" verwenden möchte. Dafür wird die entsprechene Datei geöffnet und zeilenweise eingelesen (*funtioniert*).
Nun soll an Zeile x gesprungen werden und der restliche Inhalt der Datei in eine neue Datei geschrieben werden.
Wie mache ich das am besten??
Danke
Datei einlesen und teile der Datei in neue Datei schreiben
-
- User
- Beiträge: 5
- Registriert: Mittwoch 30. August 2006, 16:11
- Wohnort: Cottbus
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Ohne großartig getest zu haben, hätte ich diesen Code im Angebot:Blackgarfield hat geschrieben:Nun soll an Zeile x gesprungen werden und der restliche Inhalt der Datei in eine neue Datei geschrieben werden.
Wie mache ich das am besten??
Code: Alles auswählen
# von dritter Zeile
x = 3
f = file('qtwrap.py', 'r')
lines = f.readlines()
f.close()
f_out = file('out', 'w')
f_out.writelines(lines[x-1:])
f_out.close()
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
- __blackjack__
- User
- Beiträge: 14028
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Aktuell gibt es `file()` nicht mehr (damit ist das als Name für Dateiobjekte frei geworden!) und man würde die ``with``-Anweisung verwenden, und sollte eine Kodierung angeben. ISO-8859-1 ist eine Kodierung die jedem Byte ein Zeichen zuordnet, also auch beliebige Binärdaten ”durchschleusen” kann, und sich hier deshalb eignet das Verhalten des ursprünglichen Programms (fast) nicht zu verändern:
Diese Lösung liest die komplette Datei in eine Liste mit Zeilendaten ein. Wenn man den Speicherverbrauch unabhängig von der Dateigrösse haben möchte, beispielsweise wenn man grosse Protokolldateien verarbeiten will, oder nicht weiss wie gross die Datei(en) letztlich werden können, bietet sich eine Lösung an, die zeilenweise kopiert (ungetestet):
Code: Alles auswählen
#!/usr/bin/env python3
def main():
# von dritter Zeile
x = 3
with open("qtwrap.py", "r", encoding="iso-8859-1") as file:
lines = file.readlines()
with open("out", "w", encoding="iso-8859-1") as file:
file.writelines(lines[x - 1 :])
if __name__ == "__main__":
main()
Code: Alles auswählen
#!/usr/bin/env python3
from itertools import islice
def main():
# von dritter Zeile
x = 3
with open("qtwrap.py", "r", encoding="iso-8859-1") as lines:
with open("out", "w", encoding="iso-8859-1") as file:
file.writelines(islice(lines, x - 1, None))
if __name__ == "__main__":
main()
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.