Durch bestimmte Textsegmente iterrieren

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
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

milexy86 hat geschrieben:@snafu: Wird doch alles auch nur in python gemacht :wink:
Ups, ich ich bin mit einem anderen Thread durcheinander gekommen... :oops:
milexy86
User
Beiträge: 22
Registriert: Freitag 7. Februar 2014, 16:33

Hallo,

ja, es funktioniert jetzt!

Wie kann ich aber einen Tuple an strings suchen, also beispielsweise:

Code: Alles auswählen

search_text = '\\Algorithm', '\\Libraries'
Muss ich im Attribut "search_text" bei der Funktion "wanted_lines" diese Möglichkeit irgendwie explizit angeben?
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Passe Zeile 10 (Code von /me) an mit

Code: Alles auswählen

any(needle in line for needle in search_text)
(und am besten aenderst du `search_text` noch zum Plural)

Die Alternative sind Regular Expressions.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

milexy86 hat geschrieben:Wie kann ich aber einen Tuple an strings suchen, [...]
Wenn du ein Tupel aus Möglichkeiten definierst, dann musst du überprüfen ob mindestens einer der Einträge in der Zeile zu finden ist. Zuerst nennen wir den Bezeichner mal search_texts. Das hat zwar keine Auswirkungen auf den Ablauf des Codes, beschreibt den Inhalt aber korrekter.

Um abzufragen ob eine der Möglichkeiten passt kann man any verwenden. any erhält als Parameter ein Iterable dessen zurückgelieferte Elemente überprüft werden. Diese Elemente sollten also angeben, ob die Suche zutrifft. Benötigt wird also eine Schleife die alle Elemente von search_texts durchläuft und für jedes zurückmeldet ob es in line vorhanden ist. Wenn man das kombiniert gelangt man zu folgendem Code:

Code: Alles auswählen

if wanted and any(s in line for s in search_texts):
Solltest du Verständnisprobleme mit der Zeile haben, dann frag bitte nach. Code nach diesem Muster ist ziemlich elementar beim Umgang mit Python.

Edit: Wenn hier zwei erfahrene Leute den gleichen Code vorschlagen, dann ist das vermutlich korrekt. :D
milexy86
User
Beiträge: 22
Registriert: Freitag 7. Februar 2014, 16:33

Hallo,

danke euch nochmals für die umfangreiche Unterstützung und die Tipps. Bin jetzt um einiges an Wissen reicher geworden :)
Die Lösung mit "any" funktioniert.

Ich habe das auch mit regulären ausdrücken gelöst:

Code: Alles auswählen

import re
with open("input_file.txt", "r") as infile, open("output_file.txt", 'w') as outfile: 

	for result in re.findall('source_code_includes(.*?)\}', infile.read(), re.S):
		for line in result.split('\n'):
			if re.search('(Algorithm|Libraries)', line):
				outfile.write(line + '\n')
Antworten