2017-05-15 18 views
2

したがって、Flaskを使用してPythonで.csvファイルを開こうとしています。私はPythonライブラリからコードをコピーしますが、あるエラーメッセージから別のエラーメッセージに行き、私が何を間違っているのか分かりません。 TypeError:無効なファイル:Flaskを使用してPythonでcsvファイルを開く

私が間違っていることは何ですか?

私の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 
     with open(request.files["portfolios"]) as csvfile: 
      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 %} 
+0

どの行番号がエラーに関連付けられていますか? – Matthias

+0

多分[this](http://stackoverflow.com/questions/33070395/not-able-to-parse-a-csv-file-uploaded-using-flask)助けてください、どんな場合でもfyiには違いがありません。フラスコまたはPythonでcsvファイル、それはPythonのようなものです。 – Matthias

答えて

1

ファイルが既に開かれています。 openは文字列ファイル名をとり、開いているファイルオブジェクトを作成しましたが、request.filesのオブジェクトはすでに開いているファイルのようなオブジェクトであるため、ファイルオブジェクトを作成する必要はありません。

portfolios = csv.DictReader(request.files['portfolios']) 
+0

ありがとう!これは、少なくともそのエラーを削除します。今、私はこの行に "AttributeError:__exit__"を取得しています:request.files ["portfolios"] as csvfile: 申し訳ありません申し訳ありません、私はかなり新しいプログラミングです...このエラーの原因は何ですか? –

+0

withブロックを使用しないでください。 – davidism

+0

ええと、 "iteratorはバイトではなく文字列を返すべきです"と言っています。次のようにIOtextwrapperを追加して解決する必要があります。 #ポートフォリオデータ付きのcsvファイルをロードします。 csvfile = TextIOWrapper(request.files ['portfolio')]ファイル:encoding = request.encoding) portfolios = csv.DictReader(csvfile)AttributeErrorを返します: '_io.BytesIO'オブジェクトには属性 'file'がありません:( –

関連する問題