2012-05-05 31 views
2

私はappengineでxlrdを使用しています。私は、入力ファイルを読み込むカントフラスコApp Engineでxlrdを使ってファイルを読み込むには

を使用して、それが同じエラーメッセージを表示し続け

コードは、私はこれがアップロードして、それを保存しないことによって引き起こされる可能性があることを認識

def read_rows(inputfile): 
    rows = [] 
    wb = xlrd.open_workbook(inputfile) 
    sh = wb.sheet_by_index(0) 
    for rownum in range(sh.nrows): 
     rows.append(sh.row_values(rownum)) 
    return rows 

@app.route('/process_input/',methods=['POST','GET']) 
def process_input(): 
    inputfile = request.files['file'] 
    rows=read_rows(request.files['file']) 
    payload = json.dumps(dict(rows=rows)) 
    return payload 

ですファイル。この問題を回避するには?これは他の多くの人々にも役立ちます。任意の助けがありがとう、THX

更新:私が以下に投稿した解決策が見つかりました。 xlrdを使って混乱している人にとっては、私が投稿したオープンソースのプロジェクトリポジトリを参照することができます。キーがファイル名の代わりにファイルの内容を渡しています

答えて

5

最終的に解決策を見つける

私はそれをやっています。代わりに、ファイルを保存するので、私は、ファイルの内容を読み、xlrdはそれ

def read_rows(inputfile): 
    rows = [] 
    wb = xlrd.open_workbook(file_contents=inputfile.read()) 
    sh = wb.sheet_by_index(0) 
    for rownum in range(sh.nrows): 
    rows.append(sh.row_values(rownum)) 
    return rows 

がうまく働いていたとJSON-可能な形式にExcelファイルを読み込むになってみましょう。 jsonを出力したい場合は、単にjson.dumps()を使います。

https://github.com/cjhendrix/HXLator/blob/master/gae/main.pyに完全なコード例があり、xlrdの完全な実装とデータの操作方法が記載されています。ポインタ

0

トレースバックからのジャッジです。

File "/Users/fauzanerichemmerling/Desktop/GAEHxl/gae/lib/xlrd/init.py", line 941, in biff2_8_load 
    f = open(filename, open_mode) 

あなたはこの行を変更してみてください:

f = filename 
+2

そのコードのための

Thxを、サードパーティのライブラリであり、そしてちょうど任意に、それは恐ろしく、物事を破る可能性が高いと思われる代わりに、ファイル名のファイルを受け入れるように変更します。 – geoffspear

3

用途:

wb = xlrd.open_workbook(file_contents=inputfile) 

あなたがopen_workbookを起動する方法は、あなたがファイル名であることをで渡しているものではありません期待していFlask FileStorageオブジェクトは実際のファイルをラップします。

+0

これは本当に私を助けました。私はファイル名の代わりに内容を取得する必要があります。こうしてinputfile.read()が来た。ありがとう – EmFeld

関連する問題