Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Pliki tekstowe - różne kodowanie

8 views
Skip to first unread message

didi

unread,
Jul 2, 2009, 5:28:08 AM7/2/09
to
witam

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

Daniel Mróz

unread,
Jul 2, 2009, 6:02:27 AM7/2/09
to
On 02.07.2009, didi <di...@didi.com> wrote:
> 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.
Jeśli kodowania mogą być różne, to być może to Ci pomoże:

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+ ]

didi

unread,
Jul 2, 2009, 8:00:23 AM7/2/09
to

Użytkownik "Daniel Mróz" <be...@alpha.pl> napisał w wiadomości
news:slrnh4p1jg...@pino.cyberdeck.pl...

> On 02.07.2009, didi <di...@didi.com> wrote:
>> 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.
> Jeśli kodowania mogą być różne, to być może to Ci pomoże:
>
> http://chardet.feedparser.org/
>
> Nie wiem czy działa na plikach tekstowych (bez jawnej definicji
> kodowania),
> ale warto sprawdzić.
>


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

William Bonawentura

unread,
Jul 2, 2009, 9:16:05 AM7/2/09
to
>
> 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
>

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ść ?

didi

unread,
Jul 2, 2009, 9:37:53 AM7/2/09
to

Użytkownik "William Bonawentura" <ne...@ipartners.pl> napisał w wiadomości
news:h2ibs7$1gpd$1...@news2.ipartners.pl...

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

konryd

unread,
Jul 2, 2009, 11:30:10 AM7/2/09
to
Jeśli się nie mylę, w Pythonie 3 podajesz encoding pliku przy
otwieraniu go.

Konrad

Rob Wolfe

unread,
Jul 2, 2009, 4:22:14 PM7/2/09
to
"didi" <di...@didi.com> writes:

> 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

didi

unread,
Jul 3, 2009, 2:33:57 AM7/3/09
to

U�ytkownik "Rob Wolfe" <r...@smsnet.pl> napisa� w wiadomo�ci
news:87fxdej...@smsnet.pl...

> 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

William Bonawentura

unread,
Jul 3, 2009, 6:38:37 AM7/3/09
to

>U�ytkownik "konryd" <kon...@gmail.com> napisa� w wiadomo�ci
>news:38d6a916-54ef-4398...@c9g2000yqm.googlegroups.com...
>Je�li si� nie myl�, w Pythonie 3 podajesz encoding pliku przy
>otwieraniu go.

W Pythonie 2.5 te�, korzystaj�c z codecs.open

Artur Lew

unread,
Jul 5, 2009, 3:59:20 AM7/5/09
to
didi wrote:
> 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
Hmm nie zartuj.
Nowa dokumentacja czyta sie jak ksiazka i w przeciwienstwie do belkotu
wygenerowanego javadoc-em ma przyklady ;)
Mozesz jeszcze sprobowac dokumentacji dostepnej przez wbudowany skrypt
pydocgui.pyw. Dzieki czem bedziesz mial aktualna dokumentacje generowana
z kodu w przegladarce.

--
Pozdrawiam
Artur Lew
arturdotlewatgmaildotcom

0 new messages