#python #xlrd
#python #xlrd
Вопрос:
это мой код:
#!/usr/bin/python
#-*-coding:utf-8-*-
import xlrd,sys,re
data = xlrd.open_workbook('a.xls',encoding_override="utf-8")
a = data.sheets()[0]
s=''
for i in range(a.nrows):
if 9<i<20:
#stage
print a.row_values(i)[1].decode('shift_jis') 'n'
но это показывает :
????
????????
??????
????
????
????
????????
итак, что я могу сделать ,
Спасибо
Комментарии:
1. Похоже, что вы читаете файл как UTF-8, затем пытаетесь интерпретировать что-то как Shift JIS? Я бы не ожидал, что это сработает!
Ответ №1:
Справочная информация: В «современном» (Excel 97-2003) XLS-файле текст фактически хранится в формате Unicode. В старых файлах текст хранится в виде 8-битных строк, а запись «кодовой страницы» сообщает, как он закодирован, например, целое число 1252 соответствует кодировке, известной как cp1252
или windows-1252
. В любом случае, xlrd
представляет извлеченный текст в виде объектов Unicode.
Пожалуйста, вставьте эту строку в свой код:
print data.biff_version, data.codepage, data.encoding
Если у вас есть новый файл, вы должны увидеть
80 1200 utf_16_le
В любом случае, пожалуйста, отредактируйте свой вопрос, чтобы сообщить о результатах.
Проблема 1: encoding_override
требуется, ТОЛЬКО если файл является старым файлом, И вы знаете / подозреваете, что запись кодовой страницы опущена или неверна. Это игнорируется, если файл является новым файлом. Вы действительно знаете, что файл создан до Excel-97, а текст закодирован в UTF-8? Если это так, то он мог быть создан только каким-то серьезно заблуждающимся сторонним программным обеспечением, и Excel взорвется, если вы попытаетесь открыть его с помощью Excel; посетите автора бейсбольной битой. В противном случае не используйте encoding_override.
Проблема 2: У вас должны быть unicode
объекты. Чтобы отобразить их, вам нужно закодировать (не декодировать) их от unicode
до str
, используя подходящую кодировку. Очень удивительно, что print unicode_object.decode('shift-jis')
не вызывает исключения и печатает вопросительные знаки.
Чтобы помочь понять это, пожалуйста, измените свой код таким образом:
text = a.rowvalues(i)[1]
print i, repr(text)
print repr(text.decode('shift-jis'))
и сообщить о результате.
Чтобы мы могли помочь вам выбрать подходящую кодировку (если таковая имеется), сообщите нам, какую версию какой операционной системы вы используете, и что отображается следующим образом:
print sys.stdout.encoding
import locale
print locale.getpreferredencoding()
Дальнейшее чтение:
(1) документация xlrd (раздел о Unicode, прямо впереди)… включено в дистрибутив, или получите последнюю фиксацию здесь.
(2) руководство по Python Unicode.
Ответ №2:
Почему ваша кодировка не переопределяется в open shift-jis?
data = xlrd.open_workbook('a.xls',encoding_override="shift-jis")
Если файл действительно является shift-JIS, существует множество кодовых точек (ну, честно говоря, почти все из них), которые не перекрываются с допустимыми кодовыми точками UTF-8. Если вы получаете недопустимые символы (?), и ваш файл действительно UTF-8, и вы хотите вывести Shift-JIS, могу ли я предположить, что ваша оболочка вывода (для печати — вероятно, файл подойдет) не может обработать кодировку.