Avatar
kaja09
Člen
Avatar
kaja09:

Zdravím, potrebovala bych pomoc s jedním ukolem, mam načíst soubor do pole, napadlo mne tohle:

def cti(jmeno_souboru):
with open(jmeno_souboru) as soubor:
radek = soubor.read()­.split('\n')
print(radek)

soubor vypadá takhle :

9
7,xqz,False
(prázdni řádek)
2.33

a muj výstup je: ['9', '7,xqz,False', '', '2.33'] ale potřebuju aby to vypadalo takhle :
[9, [7, 'xqz', False], '', 2.33] , vubec si s tím nevím rady s tím, jak to dostat ven ze stringu a uložit do dalšího pole když se tam objeví aspoň jedna čírka. Dekuju za každy napad

 
Odpovědět 7.3.2015 14:52
Avatar
hanpari
Redaktor
Avatar
Odpovídá na kaja09
hanpari:

To tvoje zadání není moc jasné:

Takhle by to bylo trochu elegantnější

with open(cesta) as soubor:
    for radka in soubor:
        for slovo in radka[:-1].split(","):
           #tady bude tvuj dalsi kod

No, a měla bys využít konverzní funkce a konstrukci try except

int("3") # 3
int("2.1") # vyhodí chybu, takže bude záležet na pořadí, ve kterém se to pokusíš konvertovat
float("2.1") # 2.1

Snad ti to pomůže.

 
Nahoru Odpovědět 7.3.2015 18:17
Avatar
hanpari
Redaktor
Avatar
hanpari:

Nevím, jestli to někdo ocení, ale v souvislosti s tou konverzní funkcí mne napadl tento kód, něco na způsob F# Option :) Kdo si na to troufá, může ho zkusit rozluštit :)

from functools import partial

def check(value, func):
   try:
      return func(value)
   except:
      return None

convert = lambda word: next(filter(None,
                                map(partial(check, word),
                                   (int, float))), word)


for slovo in "1", "2.3", "slovo":
   slovo = convert(slovo)
   print(slovo, " : ", type(slovo))

# Vypíše
>>>
1  :  <class 'int'>
2.3  :  <class 'float'>
slovo  :  <class 'str'>
Editováno 7.3.2015 21:43
 
Nahoru Odpovědět  +2 7.3.2015 21:41
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.