Hi,
bin recht unerfahren mit dem Programm Python^^
Ersteinma zu meinem Problem...
Ich habe ein Verzeichnis.
In diesem Verzeichnis befinden sich Textdateien.
In diesen Textdateien soll ich nach einem bestimmten Begriff suchen und diese dann rausschreiben.
Wie kann ich es also mit Python anstellen, alle Textdateien in diesem Verzeichnis absuchen zu lassen, und dann jede Zeile, in der dieser Begriff vorkommt zu kopieren und in einem Textdokument abzuspeichern?
Wie ich eine Textdatei öffne und das geschriebene lese weis ich schon (fileHandle = open("Pfad zur Datei","r" etc...)
Spezielle Texte aus einer Textdatei kopieren
-
- User
- Beiträge: 17
- Registriert: Dienstag 14. Juli 2009, 16:51
Hm also damit komme ich nicht so richtig weiter, da heute mein 2. Tag mit Python ist.
Hab mir mal ein uraltes Buch zu Python durchgelesen und nutze daher auch momentan noch Python 2.35

Hab mir mal ein uraltes Buch zu Python durchgelesen und nutze daher auch momentan noch Python 2.35
- Defnull
- User
- Beiträge: 778
- Registriert: Donnerstag 18. Juni 2009, 22:09
- Wohnort: Göttingen
- Kontaktdaten:
1) Python 2.6 installieren
2) Lesen: http://docs.python.org/tutorial/index.html
3) Nachschlagen: http://docs.python.org/lib/lib.html
2) Lesen: http://docs.python.org/tutorial/index.html
3) Nachschlagen: http://docs.python.org/lib/lib.html
Bottle: Micro Web Framework + Development Blog
Darf ich mir das kopieren und für eigene Postings verwenden?Defnull hat geschrieben:1) Python 2.6 installieren
2) Lesen: http://docs.python.org/tutorial/index.html
3) Nachschlagen: http://docs.python.org/lib/lib.html

- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Alternativ:
1) Python 3.1 installieren
2) Lesen: http://docs.python.org/3.1/tutorial/index.html oder auch http://tutorial.pocoo.org (deutsche Uebersetzung)
3) Nachschlagen: http://docs.python.org/3.1/library/index.html
1) Python 3.1 installieren
2) Lesen: http://docs.python.org/3.1/tutorial/index.html oder auch http://tutorial.pocoo.org (deutsche Uebersetzung)
3) Nachschlagen: http://docs.python.org/3.1/library/index.html
-
- User
- Beiträge: 17
- Registriert: Dienstag 14. Juli 2009, 16:51
So,
ich habe jetzt einen Script geschrieben, welcher die genannten daten öffnet und den gesuchten Inhalt in ein Textdokument speichert.
Allerdings habe ich in dem Ordner rund 50 Daten, welche ich absuchen muss :/
Wie kann ich Python sagen, dass es im kompletten Verzeichnis in den einzelnen Daten automatisch nachschauen soll und diese dann in einem Textdokument speichert?
Hier mal mein Code:
ich habe jetzt einen Script geschrieben, welcher die genannten daten öffnet und den gesuchten Inhalt in ein Textdokument speichert.
Allerdings habe ich in dem Ordner rund 50 Daten, welche ich absuchen muss :/
Wie kann ich Python sagen, dass es im kompletten Verzeichnis in den einzelnen Daten automatisch nachschauen soll und diese dann in einem Textdokument speichert?
Hier mal mein Code:
Code: Alles auswählen
global f
f=open("c:/Documents and Settings/*****/Desktop/*****/Datei", "r")
f1 = open("C://vmi-buch/ifdef.txt",'w')
def new1():
for line in f.readlines():
if line.find('#ifdef')>=0:
f1.write("%s" %line)
new1()
f.close()
f=open("c:/Documents and Settings/*****/Desktop/*****/Datei", "r")
f2 = open("C://vmi-buch/ifndef.txt",'w')
def new2():
for line in f.readlines():
if line.find('#ifndef')>=0:
f2.write("%s" %line)
new2()
f.close()
@Knuspersuppe: ``global`` auf Modulebene hat keinen Effekt. Man sollte auf ``global`` sowieso verzichten.
Die Ergebnisdatei wird zweimal geöffnet, aber nie explizit geschlossen.
Man kann direkt über Dateiobjekte iterieren. Die `readlines()`-Methode liest die gesamte Liste auf einmal ein.
Ob eine Zeichenkette in einer anderen enthalten ist, testet man idiomatischer mit dem ``in``-Operator.
``'%s' % line`` ist eine kompliziertere Variante einfach ``line`` zu schreiben, wenn der Typ von `line` sowieso schon `str` ist.
Die Ergebnisdatei wird zweimal geöffnet, aber nie explizit geschlossen.
Man kann direkt über Dateiobjekte iterieren. Die `readlines()`-Methode liest die gesamte Liste auf einmal ein.
Ob eine Zeichenkette in einer anderen enthalten ist, testet man idiomatischer mit dem ``in``-Operator.
``'%s' % line`` ist eine kompliziertere Variante einfach ``line`` zu schreiben, wenn der Typ von `line` sowieso schon `str` ist.
-
- User
- Beiträge: 17
- Registriert: Dienstag 14. Juli 2009, 16:51
So, hab jetzt rausgefunden, wie man alle Daten mit einer bestimmten Endung aus dem Verzeichnis auflistet.
Jetzt muss ich nurnoch wissen, wie man nun diese speziellen Daten nacheinander öffnet und nach dem gesuchten Wort durchsucht und die Zeile, in der dieses Wort steht dann in ein Textdukument speichert.
Hier mal der Code:
Jetzt muss ich nurnoch wissen, wie man nun diese speziellen Daten nacheinander öffnet und nach dem gesuchten Wort durchsucht und die Zeile, in der dieses Wort steht dann in ein Textdukument speichert.

Hier mal der Code:
Code: Alles auswählen
import os
startdir = "c:/Documents and Settings/*****/Desktop/*****/Daten/"
for root, dirs, file in os.walk(startdir):
print "" * (root.count(os.sep) - startdir.count(os.sep)),
print os.path.split(root)[1],
for Name in file:
if Name.endswith('.blabla'):
print Name
elif Name.endswith('.blubblub'):
print Name
f=open("c:/Documents and Settings/*****/Desktop/*****/Daten/Name.blabla")
f1 = open("C://vmi-buch/ifdef.txt",'a')
def new1():
for line in f.readlines():
if line.find('#ifdef')>=0:
f1.write(line)
new1()
f.close()
f=open("c:/Documents and Settings/*****/Desktop/*****/Daten/Name.blabla")
f2 = open("C://vmi-buch/ifdef.txt",'a')
def new2():
for line in f.readlines():
if line.find('#ifndef')>=0:
f2.write(line)
new2()
f.close()
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Die Einrückung ab Zeile 9 stimmt sicher nicht, oder?
Du solltest nicht file als Namen wählen - file ist ein Python built-in, welches Du damit überschreibst. Wähle doch z.B. filename.
Funktionen sollten sinnvolle Namen tragen. new1 und new2 sind sicherlich keine
Du solltest Dein Problem noch stärker aufsplitten! In Gedanken machst Du das ja sogar, indem Du sagst: "Nun muss ich noch A, B und C lösen". Ansätze davon hast Du ja schon realisiert. Also schreibe doch erst einmal Funktionen, die eine jede Aufgabe losgelöst erfüllen. Danach rufst Du sie einfach in einer sinnvollen Reihenfolge auf
Dazu solltest Du Dir dringend mal das Tutorial angucken, speziell den Bereich, wo Funktionen erklärt werden (Parameterübergabe und Rückgabewerte!) und dazu noch die grundlegenden Datentypen wie Listen und Tupel.
Also noch mal zusammengefasst:
Du schreibst eine Funktion, die einen Verzeichnispfad als String übergeben bekommt und dann alle Verzeichnisse unterhalb dieses Teilbauemes durchläuft. Gesuchte Dateinamen speicherst Du einfach in eine Liste, die Du am Ende der Funktion zurückgibst.
Du schreibst eine Funktion, die einen Dateinamen und ein Sucwort übergeben bekommt, diese Datei öffnet und die Datei dann nach diesem Suchwort durchstöbert. eine gefundenen Zeilen merkst Du Dir wieder in einer Liste, die Du dann zurückgibst.
Dann schreib eine Funktion, die einen Dateinamen übergeben bekommt und eine Liste von Zeilen. Diese Funktion soll einfach alle Zeilen in eine Textdatei speichern. Sie braucht nichts explizit zurückzuliefern.
ALs letztes brauchst Du noch eine Funktion (z.B. main), die alle bisherigen zusammenschaltet.
Dazu sammelst Du erst einmal alle Dateinamen ein, die in Frage kommen. Dann musst Du diese Liste durchgehen und jede Datei durch die 2. Funktion parsen lassen. Sämtliche Rückgaben vereinigst Du in einer Liste. Als letztes musst Du diese Liste eben noch in eine Datei schreiben lassen, durch Funktion Nummer 3.
Vorteil davon: Du kannst jede einzelne Funktion unabhängig von einander testen (z.B. indem Du fixe Dateinamen oder aber auch kurze von Hand im Programm definierte Listen übergibst) Wenn jede einzelne läuft, ist das "Zusammenschalten" oft sehr einfach
Natürlich ist mein Vorschlag in einigen Bereichen nicht wirklich optimal, aber das hängt natürlich auch von Anforderungen ab, die Du ggf. noch nicht genannt hast
Du solltest nicht file als Namen wählen - file ist ein Python built-in, welches Du damit überschreibst. Wähle doch z.B. filename.
Funktionen sollten sinnvolle Namen tragen. new1 und new2 sind sicherlich keine

Du solltest Dein Problem noch stärker aufsplitten! In Gedanken machst Du das ja sogar, indem Du sagst: "Nun muss ich noch A, B und C lösen". Ansätze davon hast Du ja schon realisiert. Also schreibe doch erst einmal Funktionen, die eine jede Aufgabe losgelöst erfüllen. Danach rufst Du sie einfach in einer sinnvollen Reihenfolge auf

Dazu solltest Du Dir dringend mal das Tutorial angucken, speziell den Bereich, wo Funktionen erklärt werden (Parameterübergabe und Rückgabewerte!) und dazu noch die grundlegenden Datentypen wie Listen und Tupel.
Also noch mal zusammengefasst:
Du schreibst eine Funktion, die einen Verzeichnispfad als String übergeben bekommt und dann alle Verzeichnisse unterhalb dieses Teilbauemes durchläuft. Gesuchte Dateinamen speicherst Du einfach in eine Liste, die Du am Ende der Funktion zurückgibst.
Du schreibst eine Funktion, die einen Dateinamen und ein Sucwort übergeben bekommt, diese Datei öffnet und die Datei dann nach diesem Suchwort durchstöbert. eine gefundenen Zeilen merkst Du Dir wieder in einer Liste, die Du dann zurückgibst.
Dann schreib eine Funktion, die einen Dateinamen übergeben bekommt und eine Liste von Zeilen. Diese Funktion soll einfach alle Zeilen in eine Textdatei speichern. Sie braucht nichts explizit zurückzuliefern.
ALs letztes brauchst Du noch eine Funktion (z.B. main), die alle bisherigen zusammenschaltet.
Dazu sammelst Du erst einmal alle Dateinamen ein, die in Frage kommen. Dann musst Du diese Liste durchgehen und jede Datei durch die 2. Funktion parsen lassen. Sämtliche Rückgaben vereinigst Du in einer Liste. Als letztes musst Du diese Liste eben noch in eine Datei schreiben lassen, durch Funktion Nummer 3.
Vorteil davon: Du kannst jede einzelne Funktion unabhängig von einander testen (z.B. indem Du fixe Dateinamen oder aber auch kurze von Hand im Programm definierte Listen übergibst) Wenn jede einzelne läuft, ist das "Zusammenschalten" oft sehr einfach

Natürlich ist mein Vorschlag in einigen Bereichen nicht wirklich optimal, aber das hängt natürlich auch von Anforderungen ab, die Du ggf. noch nicht genannt hast

-
- User
- Beiträge: 17
- Registriert: Dienstag 14. Juli 2009, 16:51
Ok, erstmal Danke
Hab mir das ganze etwas einfacher vorgestellt, da die Idee dahinter ja eigentlich garnicht mal so schwer ist.
Werd mal schauen wie ich das jetzt realisiere^^

Hab mir das ganze etwas einfacher vorgestellt, da die Idee dahinter ja eigentlich garnicht mal so schwer ist.
Werd mal schauen wie ich das jetzt realisiere^^
-
- User
- Beiträge: 17
- Registriert: Dienstag 14. Juli 2009, 16:51
Da bin ich wieder,
Bin jetzt eigentlich komplett fertig.
Mein Script öffnet nun das Verzeichnis, alle Daten mit der Endung .a und .b und listet von allen Daten die enthaltenen Texte komplett auf.
Nur mein Problem ist jetzt, dass nur von der letzten gelesenen Datei der Text auch in meinem Textdokument gespeichert wird O_O
Wie kann ich alle Texte der Daten im .txt Dokument abspeichern und nicht nur die der letzten Datei?
Bin jetzt eigentlich komplett fertig.
Mein Script öffnet nun das Verzeichnis, alle Daten mit der Endung .a und .b und listet von allen Daten die enthaltenen Texte komplett auf.
Nur mein Problem ist jetzt, dass nur von der letzten gelesenen Datei der Text auch in meinem Textdokument gespeichert wird O_O
Wie kann ich alle Texte der Daten im .txt Dokument abspeichern und nicht nur die der letzten Datei?
Du hast jetzt leider keinen Beispielcode geliefert.Knuspersuppe hat geschrieben: Mein Script öffnet nun das Verzeichnis, alle Daten mit der Endung .a und .b und listet von allen Daten die enthaltenen Texte komplett auf.
Nur mein Problem ist jetzt, dass nur von der letzten gelesenen Datei der Text auch in meinem Textdokument gespeichert wird O_O
Wie kann ich alle Texte der Daten im .txt Dokument abspeichern und nicht nur die der letzten Datei?
Ich vermute, dass du die Datei in die du schreibst mehrfach öffnest und schließt und beim Öffnen den falschen Modus verwendest.
Gruß,
Matthias
-
- User
- Beiträge: 17
- Registriert: Dienstag 14. Juli 2009, 16:51
Ok, ich nehm die Frage zurück, hat sich erledigt.
Alles funktioniert genau so wie ich es wollte
Nochmal Danke an alle!
Alles funktioniert genau so wie ich es wollte

Nochmal Danke an alle!
-
- User
- Beiträge: 106
- Registriert: Freitag 14. September 2007, 23:02
- Wohnort: Teltow
- Kontaktdaten:
Ist das nicht grep??Knuspersuppe hat geschrieben: Wie kann ich es also mit Python anstellen, alle Textdateien in diesem Verzeichnis absuchen zu lassen, und dann jede Zeile, in der dieser Begriff vorkommt zu kopieren und in einem Textdokument abzuspeichern?
Ich glaube daran versuche ich mich auch mal bei gelegenheit.
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Nein, ich meine ``ack``: http://www.betterthangrep.com/