Portál AbcLinuxu, 24. dubna 2024 16:11


Dotaz: Načtení seznamu ze souboru v Pythonu

11.5.2015 22:06 Dědek
Načtení seznamu ze souboru v Pythonu
Přečteno: 646×
Odpovědět | Admin
Ahoj, jak můžu nahradit tento kousek kódu
#!/usr/bin/python
def Seznam():
    items = [1, 2, 3, 4, 5, 6, 7, 8]
za něco, co načte seznam ze souboru ale bude se tvářit ten seznam jako v prvním příkladu. Zkoušel jsem tohle ale je to nesmysl.
#!/usr/bin/python
def Seznam():
      file = open("/tmp/seznam", "r")
      list = file.readlines()
Soubor /tmp/seznam
#!/usr/bin/python
items = [1, 2, 3, 4, 5, 6, 7, 8]
ten obsah souboru /tmp/seznam bych mohl ještě nadefinovat takto, jestli to něčemu popůže (bez nazvu seznamu)
#!/usr/bin/python
[1, 2, 3, 4, 5, 6, 7, 8]
Zkoušel jsem to i importovat ale bez výsledku. Navíc jsem nenašel způsob jak přinutit importovat nazv uložený v proměnné
var = "nazevsouboru"
import var
Poradí někdo?
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

xxxxxx avatar 11.5.2015 23:20 xxxxxx | skóre: 23
Rozbalit Rozbalit vše Re: Načtení seznamu ze souboru v Pythonu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Doporučuji použít JSON:

Uložení:
import json

lst = [1, 2, 3, 4, 5]

fw = open('filename.json', 'w')

json.dump(list, fw)

fw.close()

Načtení:
import json

fw = open('filename.json', 'r')

lst = json.load(fw)

fw.close()

Výhoda je v tom, že to funguje i na další datové typy, jako třeba dict.
12.5.2015 06:17 pavel
Rozbalit Rozbalit vše Re: Načtení seznamu ze souboru v Pythonu
Odpovědět | | Sbalit | Link | Blokovat | Admin
možná pomůže result=eval("[1,2,3,4]")
Fuky avatar 12.5.2015 09:20 Fuky | skóre: 52 | blog: 4u
Rozbalit Rozbalit vše Re: Načtení seznamu ze souboru v Pythonu
Doporučuji používat fci eval() s rozumem, pro tento typ úlohy je naprosto nevhodná. Je třeba rozlišovat mezi datovým souborem a skriptem, který si může dělat co se mu zlíbí.
rADOn avatar 12.5.2015 14:40 rADOn | skóre: 44 | blog: bloK | Praha
Rozbalit Rozbalit vše Re: Načtení seznamu ze souboru v Pythonu
Presne tak, eval je koncentrovany zlo a na jeho pouziti by mel byt zbrojni pas. Kdyz uz bych chtel cist pajtni reprezentaci, tak v modulu ast je funkce literal_eval() ktera se da pouzit stejne dobre a neni zdaleka tak brisantni :-)

"2^24 comments ought to be enough for anyone" -- CmdrTaco
12.5.2015 09:06 Sodalite
Rozbalit Rozbalit vše Re: Načtení seznamu ze souboru v Pythonu
Odpovědět | | Sbalit | Link | Blokovat | Admin

To čtení z toho souboru je v podstatě dobře, ale formát toho souboru správně není.

Pokud bych se nechtěl učit ten JSON, tak musím vědět, že funkce readlines() čte jednotlivé řádky souboru a ty pak vrací jako seznam (list).

Z toho teda vyplývá, že ty položky seznamu musím mít vždy jednu položku na řádek.

Druhá varianta by byla uložit do souboru hodnoty oddělené čárkou a ty potom oddělit do seznamu pomocí metody split(separator), kde separátor by byla ta čárka.

Kombinací těchto dvou postupů lze dobře zpracovat tzv. CSV soubor.

12.5.2015 09:07 pet
Rozbalit Rozbalit vše Re: Načtení seznamu ze souboru v Pythonu
Odpovědět | | Sbalit | Link | Blokovat | Admin
echo '1, 2, 3, 4, 5, 6, 7, 8' > /tmp/seznam

python2:

map( lambda x: x.strip(), open( '/tmp/seznam' ).read().strip().split( ',' )

python3:

list( map( lambda x: x.strip(), open( '/tmp/seznam' ).read().strip().split( ',' ) ) )

Fuky avatar 12.5.2015 10:08 Fuky | skóre: 52 | blog: 4u
Rozbalit Rozbalit vše Re: Načtení seznamu ze souboru v Pythonu
Odpovědět | | Sbalit | Link | Blokovat | Admin

Neuvedl jsi podrobnosti, takže těžko zvolit optimální řešení. Mimo již uvedených možností lze ještě např. využít:

Na py.cz najdeš dost zdrojů pro pochopení základů, bylo by dobré, aby jsi dotazy pokládal až si tyto základy sám nastuduješ. Měl jsi problém s importem modulu, tak se podívej jak se s moduly pracuje.

-- RÁMO: psí tábor , ETriatlon: Výuka plavání
rADOn avatar 12.5.2015 15:05 rADOn | skóre: 44 | blog: bloK | Praha
Rozbalit Rozbalit vše Re: Načtení seznamu ze souboru v Pythonu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Navíc jsem nenašel způsob jak přinutit importovat nazv uložený v proměnné
var = "nazevsouboru"
import var
var = __import__("nazevsouboru")
Ale to uz je vyssi divci a dokud nebudes vedet jak fungujou jmenny prostory tak bys takovy veci nemel delat pacz se s nima da (ne)pekne strelit do nohy. Importuje se kod a tedy bys z principu mel vedet co importujes – na deserializaci dat ze souboru ti kolegove vyse poradili zpusobu vic nez dost.
"2^24 comments ought to be enough for anyone" -- CmdrTaco
12.5.2015 21:36 Dědek
Rozbalit Rozbalit vše Re: Načtení seznamu ze souboru v Pythonu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Zajímavé čtení, děkuji všem.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.