Suche im Textfile

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
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
DER Olf
User
Beiträge: 283
Registriert: Mittwoch 24. Dezember 2003, 19:32

ich glaube, dass kann man mit regular expressions machen.

modul re.

aber hab keine ahnung wie :roll:

mfg

Olf
Christopy
User
Beiträge: 131
Registriert: Montag 15. Dezember 2003, 22:39

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.
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? :?:
koronatzu
User
Beiträge: 16
Registriert: Freitag 23. April 2004, 06:30
Wohnort: Wiesbaden

Sorry vergessen einzulocken
koronatzu
User
Beiträge: 16
Registriert: Freitag 23. April 2004, 06:30
Wohnort: Wiesbaden

Wofür steht das r in f=file("datei.txt", "r")????
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]])
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

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
koronatzu
User
Beiträge: 16
Registriert: Freitag 23. April 2004, 06:30
Wohnort: Wiesbaden

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?
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

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
koronatzu
User
Beiträge: 16
Registriert: Freitag 23. April 2004, 06:30
Wohnort: Wiesbaden

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.
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

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
Zuletzt geändert von Milan am Samstag 24. April 2004, 16:06, insgesamt 1-mal geändert.
koronatzu
User
Beiträge: 16
Registriert: Freitag 23. April 2004, 06:30
Wohnort: Wiesbaden

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'
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

HI. Mein Fehler. Es muss natürlich "worte=wort.findall(text)" heißen...

Milan
koronatzu
User
Beiträge: 16
Registriert: Freitag 23. April 2004, 06:30
Wohnort: Wiesbaden

Super danke hat jetzt alles hingehauen. Sag mal mit Blöcksätzen kennst dich nicht zufällig auch noch aus?
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

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
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

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
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

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
Antworten