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
Suche im Textfile
Um nur ein Wort zu suchen würd ich die RegExp im Schrank lassen. find() tuts auch.
So müsste das eigentlich funzen.
müsste eigentlich auch gehen.
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()
Code: Alles auswählen
if "Suchwort" in line:
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 wäre wenn ich allerdings die Wörter zählen wollte? Gibt es da ein bestimmten Befehl oder so?

Um das File im Mode "Read-only" zu öffnen.koronatzu hat geschrieben:Wofür steht das r in f=file("datei.txt", "r")????
aus python docu:
file( filename[, mode[, bufsize]])
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.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?
Milan
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?
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
Hi koronatzu,
funktioniert mit jedem anständig geschriebenen Text. Falls nicht, beschreibe genauer wo Probleme auftreten oder poste einen Beispieltext.
Gruß
Dookie
Code: Alles auswählen
f = file("datei.txt", "r")
text = f.read()
f.close()
worte = text.split()
anzahl = len(worte)
Gruß
Dookie
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.Dookie hat geschrieben:Hi koronatzu,
funktioniert mit jedem anständig geschriebenen Text. Falls nicht, beschreibe genauer wo Probleme auftreten oder poste einen Beispieltext.Code: Alles auswählen
f = file("datei.txt", "r") text = f.read() f.close() worte = text.split() anzahl = len(worte)
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)
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
Zuletzt geändert von Milan am Samstag 24. April 2004, 16:06, insgesamt 1-mal geändert.
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'
AttributeError: 'list' object has no attribute 'findall'
-
- 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.
Die Satzzeichen könnte man auch mit einer Listcomphersion oder wie das Teil heisst eliminieren.
dann reicht ein einfaches worte.count("Fliegen").
Gruß
Dookie
"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
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()]
Gruß
Dookie
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


Milan
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
dann fragen wir halt nach den Satzzeichen
Gruß
Dookie
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