🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.python
10 messages
10 total messages Started by didi Thu, 02 Jul 2009 09:28
Pliki tekstowe - różne kodowanie
#26334
Author: didi
Date: Thu, 02 Jul 2009 09:28
36 lines
2178 bytes
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
Re: Pliki tekstowe - różne kodowanie
#26335
Author: Daniel Mróz
Date: Thu, 02 Jul 2009 10:02
19 lines
1623 bytes
On 02.07.2009, didi <didi@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 <beorn@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+                           ]
Re: Pliki tekstowe - różne kodowanie
#26336
Author: didi
Date: Thu, 02 Jul 2009 12:00
22 lines
1873 bytes
Użytkownik "Daniel Mróz" <beorn@alpha.pl> napisał w wiadomości 
news:slrnh4p1jg.9kl.beorn@pino.cyberdeck.pl...
> On 02.07.2009, didi <didi@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 
Re: Pliki tekstowe - różne kodowanie
#26337
Author: William Bonawentura
Date: Thu, 02 Jul 2009 13:16
8 lines
1372 bytes
>
> 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ść ? 
Re: Pliki tekstowe - różne kodowanie
#26338
Author: didi
Date: Thu, 02 Jul 2009 13:37
18 lines
1844 bytes
Użytkownik "William Bonawentura" <news@ipartners.pl> napisał w wiadomości 
news:h2ibs7$1gpd$1@news2.ipartners.pl...
> >
>> 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ść ?

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 
Re: Pliki tekstowe - różne kodowanie
#26339
Author: konryd
Date: Thu, 02 Jul 2009 15:30
4 lines
1475 bytes
Jeśli się nie mylę, w Pythonie 3 podajesz encoding pliku przy
otwieraniu go.

Konrad
Re: Pliki tekstowe - różne kodowanie
#26341
Author: Rob Wolfe
Date: Thu, 02 Jul 2009 20:22
37 lines
2061 bytes
"didi" <didi@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
Re: Pliki tekstowe - różne kodowanie
#26342
Author: didi
Date: Fri, 03 Jul 2009 06:33
24 lines
2007 bytes
Użytkownik "Rob Wolfe" <rw@smsnet.pl> napisał w wiadomości 
news:87fxdej0nd.fsf@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 
Re: Pliki tekstowe - różne kodowanie
#26340
Author: William Bonawentura
Date: Fri, 03 Jul 2009 10:38
7 lines
1444 bytes
>Użytkownik "konryd" <konryd@gmail.com> napisał w wiadomości 
>news:38d6a916-54ef-4398-88c7-612b82914fba@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
Re: Pliki tekstowe - różne kodowanie
#26343
Author: Artur Lew
Date: Sun, 05 Jul 2009 07:59
14 lines
1504 bytes
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
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads