我想了2天以後發現在下面的代碼中將xls文件轉換爲CSV文件時出現了什麼錯誤 我的問題是某些字符編碼不正確(é,à...等)在輸出CSV。我已經閱讀了大量SOF文章,但是我沒有找到解決方案。我知道問題來自只處理Ascii或UTF-8的csv模塊,但我不知道如何處理它。 我也使用替換模塊unicodecsv沒有成功。我知道這裏有一些例子,對於unicode csv unicode example但我不知道使用它的正確方法。Unicode從xls到CSV
我確信我的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")
編輯:新代碼:它只轉換第一張(我不需要anymre牀單)。
#!/usr/bin/env python
# -*- coding: utf8 -*-
import xlrd
import unicodecsv
import codecs
def csv_from_excel(excel_file):
wb = xlrd.open_workbook(excel_file)
print wb.biff_version, wb.codepage, wb.encoding
sh = wb.sheet_by_name('Feuil1')
print sh.row_values(8)
#your_csv_file = open('your_csv_file.csv', 'wb')
your_csv_file = codecs.open('your_csv_file.csv','wb')
class ExcelFr(unicodecsv.excel):
#Separateur de champ
delimiter = ";"
unicodecsv.register_dialect('excel-fr', ExcelFr())
wr = unicodecsv.writer(your_csv_file,'excel-fr',encoding='utf-8', quoting=unicodecsv.QUOTE_ALL)
for rownum in xrange(sh.nrows):
wr.writerow(sh.row_values(rownum))
#wr.writerow([unicode(entry).encode("utf-8") for entry in sh.row_values(rownum)])
your_csv_file.close()
csv_from_excel("source-2014-02-13.xls")
reader = unicodecsv.reader("your_csv_file.csv")
print reader.encoding
OUTPUT:
80 1200 utf_16_le [u'Chaise德按摩ergonomique pliante」,u'Facile \ xe0蒙特等可調整的\ xe0 TOUT gabarit等傾TOUT TRAITEMENT杜浩特杜軍團COMME LA噸\ xeate,le dos,les \ xe9paules et les bras。 Le soutien pour la t x est est am am am a a a a a comme comme ass et et et et et et et et。。。。。。。。 Le massage sur chaise est une une mani \ xe8re tr \ xe8s efficace de stimuler la circulation du sang,de l \ uerenergie et permet au corps de retrouver un certain \ xe9quilibre。 Noter que la chaise peut \ xe9galement \ xeatre utilis \ xe9e comme chaise de tatouage。 」,u'Fauteuil去按摩相思,順從等輕便\ xe0轉運.....等等等等 UTF-8
正如你可以看到有像我這樣說字符‘\ xe0’或‘\ u2019’
我還是不明白編碼的東西都亂七八糟!
是Python 2還是3? –
這是pyhton 2 – Andronaute