Seite 1 von 1
Suche im Textfile
Verfasst: Dienstag 13. April 2004, 08:10
von PT
Hallo an Alle!
Vielleicht könnt Ihr mir bei folg. Problem helfen:
Und zwar möchte ich ein Textfile einlesen und dort nach bestimmten Ausdrücken suchen (z.B. Outports im folgenden Bsp.) und dann alle zugehörigen Ausdrücke einlesen (hier: test/Subsystem/Subsystem/Out1
und test/Subsystem/Out1). Diese Werte sollen dann Variablennamen zugewiesen werden.
Trace File Matlab Simulink Modell 'test.mdl'
Erstellungsdatum(J/M/T):(2004, 4, 8)
Inports
test/Subsystem/Subsystem/In1
test/Subsystem/In1
test/In1
Outports
test/Subsystem/Subsystem/Out1
test/Subsystem/Out1
Constants
test/Constant
FYI: Ich schreibe gerade meine Diplomarbeit und muss teilweise Python als Sprache verwenden, wobei meine Kenntnisse bis jetzt recht gering sind ;-)
Grüße,
PT
Verfasst: Dienstag 13. April 2004, 10:03
von DER Olf
ich glaube, dass kann man mit regular expressions machen.
modul re.
aber hab keine ahnung wie
mfg
Olf
Verfasst: Dienstag 13. April 2004, 11:43
von Christopy
Um nur ein Wort zu suchen würd ich die RegExp im Schrank lassen. find() tuts auch.
Code: Alles auswählen
f = file( "datei.txt", "r" )
lines = f.readlines()
for line in lines:
if line.find( "Suchwort" ) != -1:
print "gefunden"
f.close()
So müsste das eigentlich funzen.
müsste eigentlich auch gehen.
Danke
Verfasst: Mittwoch 14. April 2004, 15:15
von PT
...fuer den Tipp mit dem re
Ich hab mal noch ne zusätzliche Frage:
Verfasst: Freitag 23. April 2004, 06:26
von koronatzu
Christophy der Quelltext ist echt gut!
Was wäre wenn ich allerdings die Wörter zählen wollte? Gibt es da ein bestimmten Befehl oder so?

Verfasst: Freitag 23. April 2004, 06:31
von koronatzu
Sorry vergessen einzulocken
Noch ne Frage
Verfasst: Freitag 23. April 2004, 10:23
von koronatzu
Wofür steht das r in f=file("datei.txt", "r")????
Re: Noch ne Frage
Verfasst: Freitag 23. April 2004, 11:40
von FrancescoA
koronatzu hat geschrieben:Wofür steht das r in f=file("datei.txt", "r")????
Um das File im Mode "Read-only" zu öffnen.
aus python docu:
file( filename[, mode[, bufsize]])
Re: Ich hab mal noch ne zusätzliche Frage:
Verfasst: Freitag 23. April 2004, 19:58
von Milan
koronatzu hat geschrieben:Christophy der Quelltext ist echt gut!
Was wäre wenn ich allerdings die Wörter zählen wollte? Gibt es da ein bestimmten Befehl oder so?

Was für eine Art suche meinst du denn? Wörter insgesamt zählen oder wissen, wieviele "Häuser" es gibt. Für letzteres tut es die Stringmethode count, für ersteres würde ich allein schon wegen Satzeichen etc. RE's verweden.
Milan
Wörter zählen
Verfasst: Samstag 24. April 2004, 10:58
von koronatzu
Es geht darum die gesamte Wortanzahl in einer übergebenen Textfile zu ermitteln. Count ist da nicht so gut. Ich habe auch schon versucht die den Text in ein Dictionary umzuwandeln, ist aber an den Satzzeichen gescheitert... Wie würde das denn mit REs gehen, hab mit denen noch nicht gearbeitet?
Verfasst: Samstag 24. April 2004, 11:56
von Dookie
Hi koronatzu,
Code: Alles auswählen
f = file("datei.txt", "r")
text = f.read()
f.close()
worte = text.split()
anzahl = len(worte)
funktioniert mit jedem anständig geschriebenen Text. Falls nicht, beschreibe genauer wo Probleme auftreten oder poste einen Beispieltext.
Gruß
Dookie
Verfasst: Samstag 24. April 2004, 14:30
von koronatzu
Jetzt habe ich immerhin die Anzahl der Wörter... Kann ich auch rausfinden wieviele wörter mit einer bestimmten Anzahl von Buchstaben es gibt. Es soll dann so eine Art Statistik geben.
Verfasst: Samstag 24. April 2004, 15:09
von Milan
Dookie hat geschrieben:Hi koronatzu,
Code: Alles auswählen
f = file("datei.txt", "r")
text = f.read()
f.close()
worte = text.split()
anzahl = len(worte)
funktioniert mit jedem anständig geschriebenen Text. Falls nicht, beschreibe genauer wo Probleme auftreten oder poste einen Beispieltext.
Hi. Würde ich nicht sagen. Wie schon oben erwähnt, müssten Satzzeichen beachtet werden: "Wenn Fliegen hinter Fliegen fliegen, fliegen Fliegen hinter Fliegen." Hier kommt "Fliegen" 4 mal vor und "fliegen" 2 mal. Trotzdem wird ersteres nur 3 mal gewertet und zweites gar nur einmal, da split das Komma und den Punkt nicht wegschneidet.
Mit RE's würde ich mir alle Zeichen auflisten, aus denen bei dir Wörter bestehen sollen und die dann in einen regulären Audruck einbauen. Das sieht dann so aus:
Code: Alles auswählen
import re
wort=re.compile("[\wäüöÄÜÖß]+",re.I)
worte=wort.findall(text)
anzahl=len(text)
Welche Länge die Worte haben ist dann auch nicht schwer, ein Dictionary tut dann den Rest:
Code: Alles auswählen
stat={}
for i in worte:
anz=i.count("x")#oder für die Länge anz=len(i) oder ...
try:
stat[anz]+=1
except KeyError:
stat[anz]=1
Milan
Verfasst: Samstag 24. April 2004, 15:35
von koronatzu
Also die Anzahl der Wörter mit einer bestimmten Länge hab ich inzwischen schon rausbekommen, der einzige Makel sind halt die Satzzeichen, die noch dranhängen. Aber das Argument findall akzeptiert er bei mir nicht. Folgende Fehlermeldung:
AttributeError: 'list' object has no attribute 'findall'
Verfasst: Samstag 24. April 2004, 16:05
von Milan
HI. Mein Fehler. Es muss natürlich "worte=wort.findall(text)" heißen...
Milan
Verfasst: Samstag 24. April 2004, 16:21
von koronatzu
Super danke hat jetzt alles hingehauen. Sag mal mit Blöcksätzen kennst dich nicht zufällig auch noch aus?
Verfasst: Samstag 24. April 2004, 17:24
von Dookie
Hi Milan,
"Wenn Fliegen hinter Fliegen fliegen, fliegen Fliegen hinter Fliegen." Hat 9 Worte.
Code: Alles auswählen
In [6]: len("Wenn Fliegen hinter Fliegen fliegen, fliegen Fliegen hinter Fliegen.".split())
Out[6]: 9
Die Satzzeichen könnte man auch mit einer Listcomphersion oder wie das Teil heisst eliminieren.
Code: Alles auswählen
worte = [x[-1].isalnum() and x or x[:-1] for x in "Wenn Fliegen hinter Fliegen fliegen, fliegen Fliegen hinter Fliegen.".split()]
dann reicht ein einfaches
worte.count("Fliegen").
Gruß
Dookie
Verfasst: Samstag 24. April 2004, 22:00
von Milan
Hi. Das Ding nennt sich List Comprehension, aber du hast recht... die Wörterzahl wird dadurch im gesamten nicht beeinflusst (

), wohl aber die neue spezielle Aufgabe der Buchstabenzählung. Und isalnum findet leider keine Umlaute, aber sonst ein guter Ansatz
Milan
Verfasst: Samstag 24. April 2004, 22:26
von Dookie
dann fragen wir halt nach den Satzzeichen
Code: Alles auswählen
worte = [x[-1] in ".,;:!?" and x[:-1] or x for x in "Wenn Fliegen hinter Fliegen fliegen, fliegen Fliegen hinter Fliegen.".split()]
Gruß
Dookie