Vyhledavani v souboru – Python – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Vyhledavani v souboru – Python – Fórum – Programujte.comVyhledavani v souboru – Python – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
5. 3. 2008   #1
-
0
-

Zdrvím,
mám problém s vyhledáváním v souboru, to by měla zajišťovat tato funkce:



def hledat():
nazev=raw_input('\nZadejte jmeno souboru, ve kterem chcete vyhledavat(+.txt): ')
soubor=file(nazev,'r')
print "Ted muzete hledat v ", nazev ," jmeno.\nHledani se ukonci automaticky."
hledane=raw_input("Koho hledate? ")
for radek in soubor:
print radek ,
seznam.append(radek)
for polozka in seznam:
print hledane
print polozka ,
hledame=seznam.index(hledane)
hledame1=hledame+1
print hledane
print seznam[hledame1]

ale její výstup hlásí chybu a to i přesto, že vypíše shodu ve hledaném výrazu a kusem souboru, respektive členem seznamu(zvýrazněné).


Zadejte jmeno souboru, ve kterem chcete vyhledavat(+.txt): soubor.txt
Ted muzete hledat v soubor.txt jmeno.
Hledani se ukonci automaticky.
Koho hledate? ty
ja
123
ty
456
ty
ja
ty
123
ty
ty
ty
456

Traceback (most recent call last):
File "C:\Python25\seznam.py", line 59, in <module>
hledat()
File "C:\Python25\seznam.py", line 15, in hledat
hledame=seznam.index(hledane)
ValueError: list.index(x): x not in list

Kde je chyba? Jsou tam nějaký neviditelný znaky, či co? Prosím, navrhněte řešení.

Nahlásit jako SPAM
IP: 83.208.238.–
Reklama
Reklama
23. 3. 2008   #2
-
0
-

Zvláštní, že nikdo neví....

Nahlásit jako SPAM
IP: 83.208.238.–
Blujacker
~ Moderátor
0
Grafoman
23. 3. 2008   #3
-
0
-

Sorry, nevšiml jsem si toho;)
Jj, řekl bych, že to je neviditelnými znaky. Nejsem ted u počítače s pythonem, takže to nemohu vyzkoušet, ale neviditelné znaky se odstranují:



"\n".strip()

Nahlásit jako SPAM
IP: 213.220.226.–
Navštivte server Matematika pro každého
Najdete zde články zabývající se matematikou základních a středních škol a databázi hlavolamů.
Pro vyzkoušení Vaš
Anonymní uživatel
~ Anonymní uživatel
0 příspěvků
25. 3. 2008   #4
-
0
-

Nepomáhá to, ale nemyslím, že tam přebejvá "\n", protože ve výpisu jsou stejný rozestupy mezi proměnnými hledane, polozka i radek. Navíc ty vytučněný výpisy (na základě jejichž srovnání by měl program vypsat výsledky) jsou alesoň pro mě naprosto shodný i se shodnejma rozestupama. Už to zkouším opravovat docela dlouho a s žádným výsledkem. Neznáte někdo i jiný způsob vyhledávání v souborech? Prosím, napište, potřebuji te program brzo zprovoznit. Děkuji.

Nahlásit jako SPAM
IP: 83.208.238.–
25. 3. 2008   #5
-
0
-

Nepomáhá to, ale nemyslím, že tam přebejvá "\n", protože ve výpisu jsou stejný rozestupy mezi proměnnými hledane, polozka i radek. Navíc ty vytučněný výpisy (na základě jejichž srovnání by měl program vypsat výsledky) jsou alesoň pro mě naprosto shodný i se shodnejma rozestupama. Už to zkouším opravovat docela dlouho a s žádným výsledkem. Neznáte někdo i jiný způsob vyhledávání v souborech? Prosím, napište, potřebuji te program brzo zprovoznit. Děkuji.


to je můj příspěvek, omlouvám se, zapomněl jsem se přihlásit

Nahlásit jako SPAM
IP: 83.208.238.–
Blujacker
~ Moderátor
0
Grafoman
25. 3. 2008   #6
-
0
-

Napsal jsem funkční algoritmus (rychlejší než hledat chybu):



# -*- coding: utf-8 -*-
def najdi(text, hledat):
text=text.split("\n")#rozdel text na radky
print text
if hledat in text:
return text.index(hledat)
return -1
text="bhoj\nehoj\nahoj\nZkouska\nvyhledavani\n..."
hledat = "ahoj"
vysledek=najdi(text, hledat)
if vysledek != -1:
print "Hledané slovo se nachází na řádku %s"%(vysledek+1)
else:
print "Hledané slovo nebylo nalezeno"

Nahlásit jako SPAM
IP: 213.220.226.–
Navštivte server Matematika pro každého
Najdete zde články zabývající se matematikou základních a středních škol a databázi hlavolamů.
Pro vyzkoušení Vaš
25. 3. 2008   #7
-
0
-

Bohužel atribut split nefunguje u souborů, takže pořád nic. Přesto děkuji za dosavadní snahu, kdyby se podařilo najít algoritmus pro vyhledávání v souborech, bylo by to fajn...

Nahlásit jako SPAM
IP: 83.208.238.–
Blujacker
~ Moderátor
0
Grafoman
25. 3. 2008   #8
-
0
-

Jistě, ovšem že nefunguje u souborů, ale to se dá obejít:



soubor=file('xyz.txt','r')
text=soubor.read()
soubor.close()
text=text.split('\n')
#a je to...

Snad je to dobře, nemám čas to testovat...

Nahlásit jako SPAM
IP: 213.220.226.–
Navštivte server Matematika pro každého
Najdete zde články zabývající se matematikou základních a středních škol a databázi hlavolamů.
Pro vyzkoušení Vaš
25. 3. 2008   #9
-
0
-

Výborně, mockrát děkuji, už to funguje.

Nahlásit jako SPAM
IP: 83.208.238.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 27 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý