将字符串附加到列表时更改lxml编码

时间:2013-06-04 13:41:00

标签: python file list encoding lxml

我正在使用lxml和etree来解析html文件。代码如下所示:

def get_all_languages():
    allLanguages = "http://wold.livingsources.org/vocabulary"
    f = urllib.urlopen(allLanguages).read()
    #inFile = "imLog.xml" 
    #html = f.read()
    #f.close()
    #encoding = chardet.detect(f)['encoding']
    #f.decode(encoding, 'replace').encode('utf-8')
    html = etree.HTML(f)
    #result = etree.tostring(html, pretty_print=True, method="html")
    #print result #is of type string
    #print type(result)
    return html

然后,我从网站上提取一些信息并将其保存在一个数组中。 在将字符串附加到数组时,字符串的编码或格式会发生变化。我认为是某种unicode对象左右? 所以我认为这对我来说可能并不具有挑战性,因为我将它从数组中删除并将其打印在输出文件中。

def print_file():
#outputfile
output = 'WOLDDictionaries.txt'
dataLanguage = get_data_all_languages()
dataDictionaries = get_site_single_lang()
outputFile = open(output, "w")
outputFile.flush()
for index, array in enumerate(dataLanguage):
    indexLang = index 
    for item in array:  
        string = item
        #indexLang = index
        outputFile.write(string + "\t")
    outputFile.write("\n")
    #outputFile.flush()
    for index, array in enumerate(dataDictionaries):
        #stringArray = str(array)
        indexDic = index
        #outputFile.write(index + stringArray + "\t")
        if(indexLang == indexDic):
            #outputFile.write(string + "\t")
            for data in array:
            #stringData = str(data)
            #outputFile.write(stringData + "\t")
                for word in data:
                    stringWord = word
                    outputFile.write(stringWord + "\t")
                outputFile.write("\n")

    #outputFile.flush()

outputFile.close()  

嗯,这是错的。在将其打印到文件时,编码仍然是错误的。 我该怎么做才能找到合适的角色?

1 个答案:

答案 0 :(得分:0)

好的,我发现了问题。它在解析器中。 我在解析器中更改了编码,最后得到了正确的编码。 这个方法现在看起来像这样:

myparser = etree.HTMLParser(encoding = 'utf-8')
html = etree.HTML(f, parser=myparser)
#print etree.tostring(xml, pretty_print=True, method="xml")
#print type(xml)
return html