radek napsal(a):
> Avšak souhlasím s názorem, že soubory se čtou > většinou po řádcích takže je
> to takto praktické ale mám z toho pocit vyjímky která se mi nelíbí.

Problém je v tom, že zadrátovat do jazyka konstrukci, která ušetří
několik písmenek je sice praktické, ale nedobré. Nechť je prostě všechni
vidět. Pokud se soubory mohou číst i jinak, než po řádcích, což se děje
velmi často, tak bych tyto zjednodušující konstrukce do jazyka vůbec
nedával.


Presne tak, priklady, jak by to vypadalo jinak:

#cteni po radcich s defaultnim line oddelovacem (jak je ted)
for line in file("data.txt").lines():
...

#cteni po radcich, ktere jsou oddelene oddelovacem <br>
for line in file("data.txt").lines("<br>"):
[...]

Ale definice, že řádek v textovém souboru je ukončen
<br> jaksi není obecně přijímaná. Když chci, musím
si to napsat sám a nebo použít odpovídající parser.


Jan Matějka
Ono obecnější řešení je udělat parsovací generátory, které by šly použít s
čímkoliv file-like jako vstupním prametrem, a nestrkat parsování to objektu
file. Tedy: [...]

for line in lines(file("data.txt")):
 ...
[...] atd.

Výpočetní náročnost by zústala stejná. Generátory mi přijdou jako skvělý
nástroj, škoda že se GvR brání zobecnění do více úrovní zanoření jenž nabízí
stackless python.

Ale vdyť mi nic nebrání zpracovávat soubor po znacích.

# Vygenerujeme si testovaci textovy soubor.
f = open('test.txt', 'w')
for i in xrange(3):
    f.write('Line %d.\n' % i)
f.close()


# Pruchod po znacich.

f = open('test.txt')
c = 'init'
while c != '':
    c = f.read(1)
    print c
f.close()

A nic mi nebrání napsat generátor, který vezme a bude vracet znaky
a použít ho:

def chargen(f):
    c = 'init'
    while c != '':
        c = f.read(1)
        yield c

for c in chargen(file('test.txt')):
    print c

A můžu si napsat jakýkoliv jiný generátor/parser.

pepr
_______________________________________________
Python mailing list
python@py.cz
http://www.py.cz/mailman/listinfo/python

Visit: http://www.py.cz

Odpovedet emailem