Python的csv、xml和特殊字符问题

2024-10-01 09:21:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在尝试从csv文件收集文本数据,并根据预定义的模式将其转换为可读的XML。我的问题似乎源于阅读和书写挪威语特殊字符(ø,æ,å),而不了解如何正确使用unicode。在

with open(inputfile, 'rb') as csvfile:
dialect = csv.Sniffer().sniff(csvfile.read(1024))
csvfile.seek(0)
reader = csv.reader(csvfile, dialect)
idflag=False
try:
    for row in reader:
        if idflag:
            #print row[0]
            toEBU(row,id_row)
            #idflag=False #for testing, limits iterations
        if row[0].lower()=='id':
            idflag=True
            id_row=row

这是读取.csv文件的代码。toEbu函数处理XMl转换:

^{pr2}$

我得到的错误是:

Traceback (most recent call last):
  File "extractor.py", line 121, in <module>
    main(sys.argv[1:])
  File "extractor.py", line 106, in main
    toEBU(row,id_row)
  File "extractor.py", line 26, in toEBU
    file_name=unicode(row[4],"utf-8")
UnicodeDecodeError: 'utf8' codec can't decode byte 0xe5 in position 9: invalid c
ontinuation byte

第[4]行的字符串是“Bryllup påTerningen”。在

我尝试过用unicode csv解析器读取数据,但这似乎也会产生错误。因此,我尝试在写入XML之前将字符转换为unicode。以前,我在编写相同的字符串时遇到了问题,并且代码在树.写入(二十) 部分。在

编辑: 从csv文件中添加了一个示例:

18.6.,,Leveranse,Ferdig redigert 30 min AV presentason,Visning,Formidling,Digital historie,Ingen planer,,,
,,Kontaktperson,Tittel,E-post,Telefon,,,,,
,,XXXX XXXXX XXXXX,XXXXXXXXXXX,XXXX@XXXXXX.XXXX.XXXX,XXXXXXXX,,,,,
,,,,,,,,,,
Id,Arkiv,Kilde,Modalitet,"Parametre, Filnavn","Beskrivelse, fri tekst",Script,Dreiebok,Opptaksplan,Nøkkelord,Rettigheter
D5.1,Nei,E,Tekst,,Manus til videoforelesning (inneholder deler og bilder  som beskrives under),Historisk oversikt over fyr og fyrliv i Frøya og Hitra,,Etter avtale med MMS,"Fyr, fyrstasjon",
D5.2,Ja,E,Video,25 minutter??,Film fyrvokter,Inspeksjonstur på Slettringen,,Opptak gjort av «Frøya Film og bilde» v Petter Vågsvær 2011,Fyrvokter slettringen,??
D5.3,Ja,E,Tekst,Fyr i krig,Digital fortelling,"Krigshistorie på fyr, med fokus på fyr i Trlag",,,"Krig, luftangrep, terningen",

第一行被忽略,只有以“D5.X”开头的行被发送到“toEBU”。在


Tags: 文件csvcsvfileinpyidunicodereader
1条回答
网友
1楼 · 发布于 2024-10-01 09:21:43

简而言之,您的文件可能编码在“iso8859-1”中。(I)可以创建较小版本的文件:

from codecs import EncodedFile
with EncodedFile(open('n.txt','wb'),'utf-8','iso8859-1') as f:
 f.write('Bryllup på Terningen')

EncodedFile的参数表示原始文件(在python中)是“utf-8”,文件是用“iso8859-1”编码的。现在,如果我使用'iso8859-1'读取文件,我可以,但是'utf-8'将给出错误:

^{pr2}$

相关问题 更多 >