Mám uložený súbor CSV kódovaný ako utf-8.
Obsahuje znaky bez ascii [umlauts].
Čítam súbor pomocou:
csv.DictReader(<file>,delimiter=<delimiter>).
Moje otázky sú:
- V ktorom kódovaní sa číta súbor?
Všimol som si, že aby som mohol označiť reťazce ako utf-8, musím vykonať:
str.decode("utf-8")
Existuje lepší prístup, ako prečítať súbor v jednom kódovaní a potom previesť do iného, t.j.
utf-8
?
[Python verzia: 2.7]
odpovede:
2 pre odpoveď č. 1V Pythone 2.7 modul CSV neuplatňuje žiadne dekódovanie - otvorí súbor v binárnom režime a vráti reťazce bajtov.
použitie https://github.com/jdunck/python-unicodecsv, ktorý za chodu dekóduje.
Používať ako:
with open("myfile.csv", "rb") as my_file:
r = unicodecsv.DictReader(my_file, encoding="utf-8")
r
bude obsahovať diktát Unicodes. Je dôležité, aby sa zdrojový súbor otvoril ako binary
mode.
1 pre odpoveď č. 2
Ako je to s použitím inštancií a tried na dosiahnutie tohto cieľa?
Zdieľaný slovník môžete uložiť na úrovni triedy a tiež ho prinútiť načítať textové súbory Unicode a dokonca zistiť ich kódovanie s použitím alebo bez použitia masiek súborov BOM.
Už dávno som napísal jednoduchú knižnicu, ktorá prepíše predvolenú hodnotu open()
s jedným, ktorý pozná Unicode.
Ak urobíš import tendo.unicode
budete môcť zmeniť spôsob, akým knižnica csv načítava súbory.
Ak vaše súbory neobsahujú hlavičku rozpisky, knižnica bude namiesto starej predpokladať utf-8 ascii
, Ak chcete, môžete dokonca zadať ďalšie núdzové kódovanie.