in textfile kopieren von keyword bis keyword

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
gerald123
User
Beiträge: 36
Registriert: Donnerstag 10. September 2015, 12:10

Hallo,

gibt es eine einfache Möglichkeit in Python, in einem Textfile den Inhalt zwischen zwei eindeutigen Keywords zu kopieren?
Danke und beste Grüße
Sirius3
User
Beiträge: 17703
Registriert: Sonntag 21. Oktober 2012, 17:20

@gerald123: ja. Was hast Du bisher versucht?
gerald123
User
Beiträge: 36
Registriert: Donnerstag 10. September 2015, 12:10

Hey,

folgendes habe ich versucht:

Code: Alles auswählen

with open('copyKeyword.txt','r') as openfile:
    with open('writeKeyword.txt', 'w') as writefile:
      for line in openfile:
          if line.startswith('#key'):
              for line in openfile:
                  if not line.startswith('#key'):
                      writefile.write(line)
Sirius3
User
Beiträge: 17703
Registriert: Sonntag 21. Oktober 2012, 17:20

@gerald123: und was ist jetzt Dein Problem?
gerald123
User
Beiträge: 36
Registriert: Donnerstag 10. September 2015, 12:10

funktioniert so leider nicht - und jetzt wärs hilfreich zu wissen a) warum der code nicht funktionert und b) ob es vielleicht eine elegantere Möglichkeit gibt :)
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Wilkommen im Forum!

Die Annahme ist (nach dem Threadtitel, anders als nach dem Code), dass deine Keywords in einer eigenen Zeile stehen und du den Bereich dazwischen kopieren willst.

Code: Alles auswählen

with open('copyKeyword.txt','r') as openfile, open('writeKeyword.txt', 'w') as writefile:
    copy = False
    for line in openfile:
         if line.startswith("#key"):
             copy = not copy
         elif copy:
             writefile.write(line)
Benutzeravatar
Kebap
User
Beiträge: 686
Registriert: Dienstag 15. November 2011, 14:20
Wohnort: Dortmund

Was bedeutet denn "funktioniert so leider nicht"? Gibt es eine Fehlermeldung? Zeige mal beispielhafte Input & Output.

Steht denn "#key" überhaupt am Anfang einer Zeile in copyKeyword.txt?
MorgenGrauen: 1 Welt, 8 Rassen, 13 Gilden, >250 Abenteuer, >5000 Waffen & Rüstungen,
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
gerald123
User
Beiträge: 36
Registriert: Donnerstag 10. September 2015, 12:10

Hey,
vielen Dank erstmal (ich bin kompletter Anfänger in Pyhton :) ).
Das Keywort #key steht am Anfang der Zeile.
Der code funktioniert so auch - aber ganz klar ist mir nicht was da passiert:

- copy wird auf boolean False gesetzt
- for loop über lines im file
- wenn line mit #key beginnt dann wird copy auf TRUE gesetzt
- wenn line nicht mit #key beginnt --> write.
--> sprich: sobald erstes Keyword im textFile --> write(line)

Frage: Warum wird in dem Beispiel:

Code: Alles auswählen

1, 2, 3, 4
#keyword1
3, 4, 5, 6
2, 3, 4, 5
#keyword2
4, 5, 6 ,7 
die erste Zeile nicht in das file "writefile" geschrieben?
BlackJack

@gerald123: Die erste Zeile wird nicht kopiert weil `copy` am Anfang mit `False` initialisiert wird.

Vorsicht übrigens: Wenn noch weitere Zeilen mit '#key' beginnen sollten, dann wird auch das zwischen diesen Zeilen kopiert werden. Keine Ahnung ob das gewünscht ist oder zu problemen führen kann.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Der Code hat 2 Modi: 1. Nicht kopieren und 2. Kopieren. Jedes mal wenn das Schluesselwort gelesen wird, wird der Modus gewechselt.

Die erste Zeile wird demnach nicht kopiert, weil du laut Anforderung ja den Bereich _zwischen_ den Schluesselwoertern kopieren wolltest.
BlackJack

@cofi: Wobei die Anforderung natürlich interpretierungsfähig ist. Also genau dann wenn das Schlüsselwort mehr als zweimal vorkommt. Das müsste der OP vielleicht nochmal näher ausführen. Ob dann nur der erste Block berücksichtigt werden soll, oder alle Zeilen zwischen dem ersten und dem letzten Vorkommen in der Datei, oder ob bei jedem Schlüsselwort das Flag gewechselt werden soll, und was passieren soll wenn eine ungerade Anzahl von Schlüsselworten vorkommt.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Das ist wohl wahr, aber in auch dann wuerde die erste Zeile nie kopiert werden :) Aber bisher konnte uns der OP noch nicht sagen, was er denn tatsaechlich genau haben moechte.
Antworten