Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Unicode从xls到CSV_Python_Excel_Csv_Unicode_Encoding - Fatal编程技术网

Python Unicode从xls到CSV

Python Unicode从xls到CSV,python,excel,csv,unicode,encoding,Python,Excel,Csv,Unicode,Encoding,从2天开始,我一直在试图找出以下代码中的错误,这些代码将xls文件转换为CSV文件 我的问题是一些字符在输出CSV上没有正确编码(é,á…等)。我已经读了很多关于软件的帖子,但我没有找到解决办法。我知道问题来自csv模块,它只处理Ascii或UTF-8,但我不知道如何处理它。 我也使用了替换模块,但没有成功。我知道这里有一些unicode的例子,但我不知道正确的使用方法 我确信我的xls是在utf_16_LE(工作簿编码)上编码的 这是我在SOF上找到的代码。我尝试了很多修改,但没有成功的方法。

从2天开始,我一直在试图找出以下代码中的错误,这些代码将xls文件转换为CSV文件 我的问题是一些字符在输出CSV上没有正确编码(é,á…等)。我已经读了很多关于软件的帖子,但我没有找到解决办法。我知道问题来自csv模块,它只处理Ascii或UTF-8,但我不知道如何处理它。 我也使用了替换模块,但没有成功。我知道这里有一些unicode的例子,但我不知道正确的使用方法

我确信我的xls是在utf_16_LE(工作簿编码)上编码的

这是我在SOF上找到的代码。我尝试了很多修改,但没有成功的方法。有人可以分辨出代码的哪一部分正在更改

#!/usr/bin/env python
# -*- coding: utf8 -*-
import xlrd
from os import sys
import csv 


def csv_from_excel(excel_file):

    workbook = xlrd.open_workbook(excel_file)
    print workbook.biff_version, workbook.codepage, workbook.encoding
    #test read of accent charactere
    rs = workbook.sheet_by_index(0)
    print rs.cell_value(1,0)

    all_worksheets = workbook.sheet_names()
    for worksheet_name in all_worksheets:
        worksheet = workbook.sheet_by_name(worksheet_name)
        your_csv_file = open(''.join([worksheet_name,'.csv']), 'wb')

        class ExcelFr(csv.excel):
        #Separateur de champ
            delimiter = ";"

        csv.register_dialect('excel-fr', ExcelFr())

        wr = csv.writer(your_csv_file,'excel-fr', quoting=csv.QUOTE_ALL)

        for rownum in xrange(worksheet.nrows):
            wr.writerow([unicode(entry).encode("utf-8") for entry in worksheet.row_values(rownum)])

        your_csv_file.close()

#if __name__ == "__main__":
#    csv_from_excel(sys.argv[1])

csv_from_excel("source-2014-02-12.xls")
编辑:新代码:仅转换第一张图纸(我不需要任何MRE图纸)

输出:

80 1200 utf_16_le [u'Chaise de massage ergonomique flipant',u'Facile\xe0 monter and ajustable\xe0 tout gabarit et pour tout traitement du haut du corps comme la t\xete,le dos,les\xe9paules et les bras.le soutien pour la t\xete est est amovible and a customable comme l\u2019 et l\u2019 l\u2019。按摩在躺椅上的效果最好我们的循环系统是不确定的、不平衡的。一辆轻便马车、白色按摩车、柔韧轻便的运输车……等等 utf-8

正如您所看到的,有些字符像我说的“\xe0”或“\u2019”


我仍然不明白编码方面的所有混乱!

在你的情况下,这是错误的:

your_csv_file = open(''.join([worksheet_name,'.csv']), 'wb')
标准Python
open()
函数打开二进制文件,因此您需要确保自己正确编码了数据。您应该导入
编解码器
模块并使用:

your_csv_file = codecs.open(''.join([worksheet_name,'.csv']), 'w', 'utf-8')
我同意你所说的
unicode(entry).encode(“utf-8”)
应该有同样的效果


如果我的建议没有帮助,那么你需要确切地告诉我们为什么你认为“某些字符编码不正确”。

看起来你只是不明白你看到了什么

打开idle并进入

print u“mani\xe8re tr\xe8s”
\x##只是一个没有ascii表示的十六进制数字


print u“l\u2019assise et l\u2019accoudoir”
将演示\u###########仅仅是一个unicode字符,没有重新呈现

是Python 2还是Python 3?您好,谢谢您的帮助:这是源xls文件()当我使用codecs.open方法时,我得到:UnicodeDecodeError:“ascii”编解码器无法解码位置15中的字节0xc3:序号不在范围内(128)在编写过程中,我已经尝试了很多编码,但仍然被阻止。Thx Joran,实际上我知道这个十六进制数字,但我不明白这是为什么当我用excel打开它时,它会显示这些字符。我将在我的服务器上进行一些测试,以查看当我读取csv文件时它的外观。
your_csv_file = codecs.open(''.join([worksheet_name,'.csv']), 'w', 'utf-8')