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 :roll:

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.

Code: Alles auswählen

if "Suchwort" in line:
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 ( :wink: ), 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