2017-05-16 5 views
0

私の以前の質問、さらにはPythonでcsvファイルを開く方法については、私はまだこれを行い、エラーからエラーに成功していません。次のようにPythonでcsvファイルを開く:builtins。 AttributeError AttributeError: '_io.BytesIO'オブジェクトに属性 'file'がありません

マイPythonコードは、次のよう

@app.route("/admin", methods=["GET", "POST"]) 
@login_required 
def admin(): 
"""Configure Admin Screen""" 
# if user reached route via POST (as by submitting a form via POST) 
if request.method == "POST": 

    # load csv file with portfolio data 
    csvfile = TextIOWrapper(request.files['portfolios'].file, encoding=request.encoding) 
    portfolios = csv.DictReader(csvfile) 

    # load csv file in dictionary 
    for row in portfolios: 
     print(row['first_name'], row['last_name']) 
else: 
    return render_template("admin.html") 

マイフラスコ/ HTMLコードがある:最初

{% extends "layout.html" %} 

`{% block title %} 
    Admin 
{% endblock %} 

{% block main %} 
<h2>Admin Console</h2> 
<h3> Upload Portfolio Data</h2> 
<form action="{{ url_for('admin') }}" method="post" enctype=multipart/form- 
data> 
<fieldset> 
    <label class="control-label">Select Portfolio Upload File</label> 
    <input id="input-1" type="file" class="file" name="portfolios"> 
    <h3>Upload Security Lists</h2> 
    <label class="control-label">Select Security Upload File</label> 
    <input id="input-1" type="file" class="file" name="securities"> 
    <div class="form-group"> 
     <button class="btn btn-default" type="submit" value = "upload">Upload</button> 
    </div> 
</fieldset> 
</form> 
{% endblock %} 

、私は文字通りPythonドキュメントからの例に従った: インポートCSV csvfile: reader = csv.DictReader(csvfile) リーダーの行: print(row ['first_name']、row ['last_nam] E '])

それは別のエラーになったタイプエラー(see my earlier post

私は、その後、 『オープン』として提案し、削除を与えたとして、このdidntの仕事。私はブロック全体を取り除きましたが、これもやはりエラーに終わりました。さて、上記のコードは、私が今の私何であり、その次のエラー生成:

builtins.AttributeError はAttributeError:「を_io.BytesIO」オブジェクトが私のcsvファイルを助けることができる何の属性「ファイル」

誰もが持っていません終わりに悪夢を輸入する?? Txs !!

+0

は、あなただけの 'たcsvfile = TextIOWrapper(request.files [ 'ポートフォリオ']、エンコーディング= request.encoding)私はそれを行う場合には、' –

答えて

0

io.TextIOWrapperは、io.BytesIOオブジェクトをすべて受け取ります。

あなたは(ほぼ)あなたが追加していることを除いて、それを渡している.file(なぜ??)、io.BytesIOクラスのフィールド

ちょうど行う(request.files['portfolios']が既にio.BytesIOオブジェクトである)されていません: 'リクエスト' オブジェクトがあります。

csvfile = TextIOWrapper(request.files['portfolios'], encoding=request.encoding) 
+0

Hmmmmm、私ははAttributeErrorを取得を試してみました属性 'encoding' .... :( –

+0

あなたは既にその問題があったことを意味します。 e型の 'request'を返します。 "encoding"パラメータを省略してください。 –

+0

はい!それは今働くようです。たくさんのtxs! –

関連する問題