Использование xlrd для чтения файла Excel xls, содержащего символы китайского языка и / или хинди - PullRequest
4 голосов
/ 18 августа 2010

http://scienceoss.com/read-excel-files-from-python/comment-page-1/#comment-1051

По приведенной выше ссылке я использовал эту утилиту для чтения файла XLS.Если файл XLS содержит символы разных языков, такие как китайский или хинди, он выводит их неправильно.Есть ли обходной путь для этого?

После поиска в Google я нашел это:

import xlrd

def upload_xls(dir,file,request):
    try:
        global msg
        global row_num
        row_num = []
        header_arr = []
        global file_path
        file_path = dir
        #reader = csv.reader(open(file), delimiter='#', quotechar='"')
        book = xlrd.open_workbook('dodgy.xls',encoding='cp1252')   ##To specify UTF8-encoding
        wb.sheet_names()
        sh =  wb.sheet_by_index(0)
        valid_xl_format = 0
        invalid_xl_format = 0
     except:
        print "Error

Но в строке book = open_workbook('dodgy.xls',encoding='cp1252'):

есть ошибкаTypeError: open_workbook() got an unexpected keyword argument 'encoding'

Ответы [ 4 ]

8 голосов
/ 19 августа 2010

[dis] claimer: я являюсь автором xlrd.

Если xls содержит символы разных языков, такие как chine или hindi. Он не выводит точные формулировки. Есть ли обходной путь?для этого ..

Аргумент encoding_override (как описано в документации) используется ТОЛЬКО для файлов OLD (созданных Excels ранее, чем Excel 97 (это год 1997)), и только тогда, когда внутреннезаписанная «кодовая страница» отсутствует или неверна.

Примечание. Старый файл с китайскими символами: переопределение с помощью «cp1252» гарантированно вызовет исключение.

Примечание: Старый файл с «хинди»(Деванагари?) Символы: очень маловероятно ... насколько я знаю, официально ни одна из скриптов ISCII никогда не была официально поддерживаемой кодовой страницей, и я не слышал ни о какой неофициальной.Любая информация на эту тему и / или примеры файлов будет очень кстати.

Excel 97 и более поздние версии записывают все текстовые данные в (эффективно) UTF-16LE.Encoding_override игнорируется, если файл является допустимым файлом Excel-97 или новее.

Независимо от версии Excel, в которой был создан файл (как описано), xlrd возвращает строки Unicode.Ваши проблемы, скорее всего, будут связаны с тем, как вы отображаете или конвертируете эти строки Юникода.

Для получения дополнительной помощи отредактируйте свой вопрос, чтобы показать примеры фактического вывода вместе с «точной формулировкой».

6 голосов
/ 18 августа 2010

Согласно документации модуля xlrd , правильный параметр: encoding_override = "cp1252" , а не encoding = "cp1252" .

Исходя из того, как вы импортируете модуль xlrd, вы должны вызывать функцию как xlrd.open_workbook, но в примере кода вы используете функцию напрямую, как если бы вы использовали «из импорта xlrd *».

2 голосов
/ 18 августа 2010

В стандартной библиотеке есть модуль csv, который обрабатывает юникод в Python 3.1.

Предупреждение: в Python 2.x библиотека csv не обрабатывает юникод.

0 голосов
/ 13 мая 2016

Есть похожий вопрос.Ответ заключался в том, что вывод вызывал проблему, а не в XLRD.

Ответ о том, как установить для сценария UTF-8 -> https://stackoverflow.com/a/17628350/713

...