Seite 1 von 1

Problem bei der Funktion suchen

Verfasst: Donnerstag 19. April 2007, 15:52
von powerpython
Hallo, ich bin ein absoluter Pythonanfänger, und habe ich hier ne Frage.
Unter habe ich ein text-file, die zuerst gelesen werden soll, und dann bestimmte Wörter gesucht werden sollen. Als Ausgabewert soll aber die Zeilennummer und Position an dieser Zeile angezeigt werden.
Kann jmd mir helfen, wie ich vorgehen soll, am besten mir kurze code schreiben, vielen Dank!!

z.B: file.txt:
hello world
0123456789
nice too see you!
HELLO world
goodbye

find (file.txt, world) => return_line = 1 , 4
return_pos = X , Y

find (file.txt, world && HELLO) => return_line = 4
return_pos = Y

Verfasst: Donnerstag 19. April 2007, 16:02
von rayo
Hi

Hier mal ein paar Codestücke, damit du mal herumexperimentieren kannst:

Code: Alles auswählen

#Datei zeilenweise einlesen
f = file(filename, 'rU')
for index, line in enumerate(f):
    print index, line
f.close()

#*words ist eine liste mit den parametern ('hello','world') drin:
def find(filename, *words):
    for word in words:
        print word
find('dateiname', 'world', 'hello')

#Text in einem String suchen
print 'world' in 'hello world'
Falls du damit nicht weiterkommst, poste mal deinen Versuch

Gruss

Verfasst: Freitag 20. April 2007, 09:30
von powerpython
eine dumme Frage, gibt es hier Unterschied zwischen filename und 'Dateiname'?

Verfasst: Freitag 20. April 2007, 09:39
von Zizibee
Wenn ich das richtig verstanden habe, dann ist 'filename' der Name der Datei, die du durchsuchst und 'dateiname' nur irgendein Beispielwort nach dem du suchen könntest.
Aber ohne Garantie! :wink:

Verfasst: Freitag 20. April 2007, 14:59
von schlangenbeschwörer
Das Argument heißt filename. 'dateiname' ist der Pfad der zu durchsuchenden Datei, also sowas wie "C:\Projekt\Beispiel.txt" oder relativ "Beispiel.txt", wobei der ja hier in ´find´ garnicht verwand wird und in Zeile 2 als Variable vorrausgesetzt wird. Is halt nur ein Stück Codebeispiel.

Verfasst: Freitag 20. April 2007, 15:20
von powerpython
Ich habe jetzt auch mit folgenden Code ein Text in Zeilenweise numeriert lesen können, aber wie die bestimmte Wörter gesucht werden kann und der Übergabewert ist z.B ('Deutschland' liegt auf der Zeile 2) so darzustellen ist, weiß ich noch nicht.
kann jmd paar Code schreiben?

Code: Alles auswählen

import sys
from string import *
d=open("suchen.txt")
zeilen=d.readlines()
nummer=1
for z in zeilen:
	print "%3i %s" % (nummer, z)
	nummer=nummer+1
 


Verfasst: Freitag 20. April 2007, 16:20
von schlangenbeschwörer
Hi!
Pimphinweise:
1. *-importe vermeiden.
2. ´file´ statt ´open´ nehmen
3. ´nummer += 1´ statt ´nummer = nummer +1´

So, wieso schreibst du nicht einfach

Code: Alles auswählen

if zu_suchendes_word in z:
   print "%s wurde in Zeile %i gefunden" %(zu_suchendes_word, nummer)
Ist ungetestet, aber so in etwa müsste es gehen.

Gruß, jj

Verfasst: Freitag 20. April 2007, 17:04
von BlackJack
2. ist umstritten. Laut Doku und Meister Guido ist `open()` zum öffnen von Dateien und `file` zum beerben zu bevorzugen.

Verfasst: Freitag 20. April 2007, 17:07
von EnTeQuAk
[offtopic]
2. ist umstritten. Laut Doku und Meister Guido ist `open()` zum öffnen von Dateien und `file` zum beerben zu bevorzugen.
Was ist `beerben`? (also in Python ;) )
[/offtopic]

MfG EnTeQuAk

Verfasst: Freitag 20. April 2007, 17:15
von BlackJack
"beerben" heisst etwas von jemanden erben der etwas zu vererben hat. Was Vererbung in der objektorientierten Programmierung bedeutet, muss ich hoffentlich nicht erklären!? :-)

Verfasst: Freitag 20. April 2007, 17:19
von schlangenbeschwörer
Ich dachte open soll irgendwann (version 3.0 ?) rausgenommen werden und komplett durch file ersetzt werden, da open und file doch komplett gleich sind und es nur um die Bezeichnung geht, die auf das, was geöffnet wir, hinweißt, oder?

Verfasst: Freitag 20. April 2007, 17:40
von BlackJack
Nein `open()` bleibt soweit ich weiss. Das eine ist eine Funktion, das andere ein Datentyp. Seit Python 2.5 sind das nicht mehr zwei verschiedene Namen für das selbe Objekt.

Verfasst: Freitag 20. April 2007, 17:49
von Leonidas
schlangenbeschwörer hat geschrieben:Ich dachte open soll irgendwann (version 3.0 ?) rausgenommen werden und komplett durch file ersetzt werden, da open und file doch komplett gleich sind und es nur um die Bezeichnung geht, die auf das, was geöffnet wir, hinweißt, oder?
Das haben viele gedacht (mich eingerechtnet), aber dazu hatten wir den file() vs. open()-Thread, wo das klargestellt wurde. Mit verschiedenen Meinungen dazu.