mam kilkaset plik�w tekstowych, kt�re musz� po��czy� w jeden plik, usuwaj�c
wcze�niej okre�lone linie i dokonuj�c zmian w poszczeg�lnych polach w
tek�cie (taka forma tekstowej bazy danych).
Na pocz�tku zaj��em si� usuwaniem samych linii:
outfile=open("name.txt",'w')
for file in filenames:
text=open(file)
lines=text.readlines()
outfile.writelines(lines[3:]) #zapisz wszystkie linie pocz�wszy od
3-ciej
text.close
outfile.close
I problem jaki napotka�em to UnicodeDecodeError: 'charmap' codec can't
decode byte ... in position ...:character mapt to <undifined>
czyli wg mnie w jednym z plik�w pojawi�o si� inne kodowanie ni� standardowe.
St�d program si� wykrzaczy�. Nie potrafi� okre�li�, jakiego rodzaju
kodowanie pojawi si� w plikach wej�ciowych, nie jest to zale�ne ode mnie.
Kombinowa�em z text=open(file,'rb') a nast�pnie jaki� split('\r\n'), �eby
uzyska� podzia� na linie i jednocze�nie uniezale�ni� si� od kodowania.
Niestety za ka�dym razem dostawa�em komunikat o braku mo�liwo�ci u�ycia
funkcji operuj�cych na stringu na buforze API.
Jakaďż˝ podpowiedďż˝ koledzy?
--
didi
http://chardet.feedparser.org/
Nie wiem czy działa na plikach tekstowych (bez jawnej definicji kodowania),
ale warto sprawdzić.
Pozdrawiam
Beorn
--
Daniel 'Beorn' Mróz <be...@alpha.pl> http://127.0.0.1/beorn
[GIT d s:- a-@ C++++ UL++++$ P+ L++++ E--- W+ N+++ o? K- w---]
[O- M- V! PS+ PE++ Y+ PGP++ t- 5 X R !tv b+ DI D++ G++ e h*]
[ r++ y+ ]
Poradziłem sobie w inny sposób. Zamiast użyć wersji 3xx użyłem wersji 2xx.
Otóż wersja 2xx nie czuje potrzeby konwertowania do unicode wszystkiego, co
napotka. Niemniej dzięki za info.s
--
didi
Skoro nie robiłes przekodowań to IMHO masz teraz plik z danymi, wktórych
rekordy są w różnych formatach kodowania. Czy ma to jakąś użyteczność ?
W moim przypadku ma. Pliki są swojego rodzaju tekstową bazą danych i tak
naprawdę potrzebowałem pojedyńczych rekordów z poszczególnych linii.
--
didi
Konrad
> Kombinowa�em z text=open(file,'rb') a nast�pnie jaki� split('\r\n'),
> �eby uzyska� podzia� na linie i jednocze�nie uniezale�ni� si� od
> kodowania. Niestety za ka�dym razem dostawa�em komunikat o braku
> mo�liwo�ci u�ycia funkcji operuj�cych na stringu na buforze API.
>
> Jakaďż˝ podpowiedďż˝ koledzy?
Tak tylko dorzuc� dla potomnych, bo mo�na po tym w�tku odnie�� wra�enie,
�e Python 3.x jest jaki� u�omny czy co�.
Po pierwsze prawd� jest, �e nie da si� u�ywa� Pythona 3.x bez czytania
dokumentacji dotycz�cej Pythona 3.x:
http://docs.python.org/3.1/library/functions.html#open
Jeden rzut oka i widzimy w funkcji `open` zbawienny parametr `errors`.
Po drugie sporo si� zmieni�o je�li chodzi o stringi:
http://docs.python.org/3.1/whatsnew/3.0.html#text-vs-data-instead-of-unicode-vs-8-bit
Tak, to nie ma prawa teraz dzia�a�:
>>> b"abc\r\ndef".split("\r\n")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: Type str doesn't support the buffer API
natomiast to dzia�a jak najbardziej:
>>> b"abc\r\ndef".split(b"\r\n")
[b'abc', b'def']
http://docs.python.org/3.1/library/stdtypes.html#bytes-methods
RW
> Tak tylko dorzuc� dla potomnych, bo mo�na po tym w�tku odnie�� wra�enie,
> �e Python 3.x jest jaki� u�omny czy co�.
> Po pierwsze prawd� jest, �e nie da si� u�ywa� Pythona 3.x bez czytania
> dokumentacji dotycz�cej Pythona 3.x:
>
> http://docs.python.org/3.1/library/functions.html#open
>
> Jeden rzut oka i widzimy w funkcji `open` zbawienny parametr `errors`.
>
Jak dla mnie to struktura tej�e dokumentacji i sama wyszukiwarka jest do
dupy. Zupe�nie nie jest intuicyjna. To by� m�j pierwszy kontakt z pythonem
wymuszony potrzeb� chwili i brakiem czasu. Co nie oznacza wcale, �e samego
pythona uwa�am za do dupy, bo akurat si� sprawdzi�.
--
didi
W Pythonie 2.5 te�, korzystaj�c z codecs.open
--
Pozdrawiam
Artur Lew
arturdotlewatgmaildotcom