6

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

上記のリンクから、このユーティリティを使用してXLSファイルを読み取りました。XLSファイルに中国語やヒンディー語などの異なる言語文字が含まれている場合、それらは正しく出力されません。これに対する回避策はありますか?

グーグルした後、私はこれを見つけました:

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

4 に答える 4

10

[dis]claimer:私はxlrdの作者です。

xlsにchineやhindiなどの異なる言語文字が含まれている場合、正確な表現が出力されません。これに対する回避策はありますか。

encoding_override引数は、(ドキュメントで説明されているように)古いファイル(Excel 97(1997年)より前のExcelによって生成されたもの)に対してのみ使用され、内部で記録された「コードページ」が欠落しているか正しくない場合にのみ使用されます。

注:漢字の古いファイル:「cp1252」でオーバーライドすると、例外が発生することが保証されます。

注:「ヒンディー語」(デーバナーガリー?)文字を含む古いファイル:ほとんどありません...私が知る限り、ISCIIスクリプトのいずれかについて公式にサポートされているコードページはなく、非公式のコードページも聞いたことがありません。このトピックやサンプルファイルに関する情報は大歓迎です。

Excel 97以降のバージョンでは、すべてのテキストデータが(事実上)UTF-16LEに記録されます。ファイルが有効なExcel-97以降のファイルである場合、encoding_overrideは無視されます。

ファイルを生成したExcelのバージョンが何であれ、(文書化されているように)xlrdはUnicode文字列を返します。あなたの問題は、それらのユニコード文字列をどのように表示または変換しているかに関連している可能性がはるかに高くなります。

さらにサポートが必要な場合は、質問を編集して、実際の出力の例と「正確な表現」を示してください。

于 2010-08-19T00:25:38.180 に答える
6

xlrdモジュールのドキュメントによると、正しいパラメータは次のとおりです。ではencoding_override="cp1252"ありませんencoding="cp1252"

xlrdモジュールをインポートする方法から、関数を次のように呼び出す必要がありますxlrd.open_workbookが、サンプルコードでは、を使用したかのように関数を直接使用しますfrom xlrd import *

于 2010-08-18T12:20:01.217 に答える
1

標準ライブラリには、Python3.1でUnicodeを処理するcsvモジュールがあります。

警告: Python 2.xでは、csvライブラリはUnicodeを処理しません。

于 2010-08-18T12:01:40.613 に答える
0

同様の質問があります。答えは、XLRDではなく、出力が問題を引き起こしていたことでした。

スクリプトをUTF-8に設定する方法についての回答-> https://stackoverflow.com/a/17628350/713

于 2016-05-13T03:25:41.503 に答える