xls 파일을 CSV 파일 으로 변환하는 다음 코드에서 정확히 무엇이 잘못되었는지 찾으려고 노력 중입니다. 일부 문자가 올바르게 인코딩되지 않았습니다 (é, à ...). 등) 출력 CSV에. 나는 이미 SOF에서 1 톤의 게시물을 읽었지만 해결책을 찾지 못했습니다. 문제는 Ascii 또는 UTF-8 만 처리하는 CSV 모듈에서 발생하지만 처리 방법을 모르겠습니다. 교환 모듈 unicodecsv도 사용했지만 성공하지 못했습니다. 나는 여기에 유니 코드 csv unicode example에 대한 몇 가지 예제가 있지만 그것을 사용하는 올바른 방법을 모르겠다는 것을 알고 있습니다.Unicode from 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")
EDIT : NEW CODE : 첫 번째 시트 만 변환합니다 (아무 시트도 필요하지 않음).
#!/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 1,200 utf_16_le [u'Chaise 드 마사지 ergonomique의 pliante 'u'Facile \ xe0 monter 등 ajustable \ xe0 TOUT gabarit 등 부어 TOUT TRAITEMENT 뒤 년산 뒤 군단 콤 t 라 \ xeate, le dos, les \ xe9paules et les bras. 출입국 관리 사무소는 귀하가 저당권을 가지고 있었는지 확인하고 있습니다. 자극을 줄이기위한 마사지는 피부를 자극하지 않고 피부를 보호하고 피부를 보호하고 피부를 보호 해줍니다. 공지 사항 \ xe9galement \ xeatre 유틸리티 \ xe9e comme chaise de tatouage. 'u'Fauteuil 마사지 블랑 드 휘기 등 손쉬운 \ xe0 수송 ..... 등 등 UTF-8
당신은 내가 말을 같은 문자가 볼 수있는'\의 xe0 '또는'\의 u2019 '
가나는 아직도 인코딩 것들을 둘러싼 모든 혼란을 이해하지 못한다! 귀하의 경우에는
파이썬 2 또는 3입니까? –
그것은 pyhton 2 – Andronaute