2017-03-19 3 views
0

Ich bin ein Neuling und möchte Daten aus einer TXT-Datei extrahieren und in eine andere Datei schreiben. Jedes Datum in einer Zeile. Aber ich verstehe nicht wie. Ich habe versucht, Anfügen, aber es wird nicht funktionieren und so schreibt sie nur das letzte Datum:Gruppen als Strings in Datei schreiben

f = open("Krupp.txt", "r") 
contents = f.read() 

f.close() #close the file 

# finditer 
# finds all Dates and shows them in a List (Montag, 15. März 2013) 
for m in re.finditer("(Montag|Dienstag|Mittwoch|Donnerstag|Freitag|Samstag|Sonnabend|Sonntag)(,)([123][0-9]|[1-9])(.)(Januar|Februar|März|April|Mai|Juni|Juli|August|September|Oktober|November|Dezember)()([0-2][0-9][0-9][0-9])", contents): 
    print m.group(0) 
    # changed 
    with open("testoutput.txt", "a") as myfile: 
    myfile.write(m.group(0)) 

--- EDIT --- Ich änderte

f.write(contents) # writes contents correctly to file with Umlauts 
    f.write(m.group(0)) 

zu

with open("testoutput.txt", "a") as myfile: 
    myfile.write(m.group(0)) 

Jetzt schreibt es alle Daten in die Datei, schreibt sie aber direkt hintereinander. Was muss ich hinzufügen, wenn ich sie untereinander haben möchte?

Kann jemand helfen?

freundlichen Grüßen

+0

Bitte weitere Informationen rund um diese bereitzustellen. Geben Sie ein Beispiel an, wie die Datei aussieht. Erhalten Sie etwas von Ihrem Regex-Match? Darüber hinaus überschreiben Sie die Datei in Ihrer Schleife jedes Mal, wenn Sie sie jedes Mal im Schreibmodus öffnen. Sie möchten Ihre Datei außerhalb Ihrer Schleife öffnen und dann schreiben. – idjaw

+0

Sie überschreiben einfach Ihre Datei in jeder Iteration, vielleicht 'open (" testoutput.txt "," a ")' ist was Sie suchen. Darüber hinaus ist das Öffnen und Schreiben der Datei bei jeder Iteration sehr langsam - speichern Sie sie in einer Zeichenfolge und schreiben Sie sie anschließend. – Jan

Antwort

0

Das Folgende ist für mich auf Python arbeiten 2.7.6

#!/bin/python 
# -*- coding: utf-8 -*- 

import re 

f = open("Krupp.txt", "r") 
contents = f.read() 

f.close() #close the file 

# finditer 
# finds all Dates and shows them in a List (Montag, 15. März 2013) 
with open("testoutput.txt", "a+") as f: 
    for m in re.finditer("(Montag|Dienstag|Mittwoch|Donnerstag|Freitag|Samstag|Sonnabend|Sonntag)(,)([123][0-9]|[1-9])(.)(Januar|Februar|März|April|Mai|Juni|Juli|August|September|Oktober|November|Dezember)()([0-2][0-9][0-9][0-9])", contents): 
     print m.group(0) 
     f.write(m.group(0)) 
     f.write("\n") 

Die Datendatei I-Test verwendet wird:

Montag, 10. März 2013 
Montag, 15. Juni 2013 
Freitag, 15. März 2013 
Montag, 15. Januar 2013 
Dienstag, 15. März 2013 
Montag, 15. März 2013 
Juli, 15. Februar - incomplete 
Juli, 15. Februar 2013 
asdasdasdasdasd;lasdjkfas;dlfjk;a fjasl;dfj ;akdfj;askjdfa 
Mittwoch, 15. März 2013 
test 
Mittwoch, 15. Januar 2013 
blah 
Montag, 15. März 2013 

-Code Erklärung/Änderungen:

  1. Ich musstehinzufügenfür Python zum Abrufen von UTF-Zeichen in der Quelle
  2. open("testoutput.txt", "a+") Dies öffnet die Datei in read+append mode.
  3. Sie haben die Datei in jeder Schleife neu geöffnet, die nicht empfohlen wird! Bewegte das Öffnen vor der Schleife
  4. with open Ausdruck schließt automatisch die Datei außerhalb des Kontexts (wenn with Block beendet). Im allgemeinen ist es sicher, da es auch die Datei auf Ausnahmen und Fehler
  5. f.write("\n") schließt: Ihre bearbeiten Antworten ... fügt eine neue Zeile nach jedem Eintrag

Lassen Sie mich wissen, wenn Sie weitere Fragen oder Sie haben brauche mehr erklärung

+0

Vielen Dank :) Ich werde wahrscheinlich eine Menge Hilfe für weitere Schritte brauchen – Elite

1

Was muss ich hinzufügen, wenn ich sie untereinander haben möchte?

Ich denke, Sie meinen einen Zeilenvorschub:

myfile.write("\n")

+0

Vielen Dank. Ich habe oft Mühe, Antworten zu finden, weil mein Vokabular fehlt – Elite