在Python中打开csv文件:builtins。 AttributeError AttributeError:' _io.BytesIO'对象没有属性' file'

时间:2017-05-16 15:01:23

标签: python csv 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
    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")

我的flask / 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     使用open(&#39; names.csv&#39;)作为csvfile:       reader = csv.DictReader(csvfile)       读者行:          打印(行[&#39; first_name&#39;],行[&#39; last_name&#39;])

这不起作用,因为它给出了类型错误(see my earlier post

然后我按照建议删除了&#34;打开&#34;,这导致了另一个错误。然后我删除了整个块,这又导致了一个错误。现在,上面的代码就是我现在的代码,它产生了以下错误:

builtins.AttributeError AttributeError:&#39; _io.BytesIO&#39;对象没有属性&#39;文件&#39;

任何可以帮助我的csv进口噩梦结束的人? TXS !!

1 个答案:

答案 0 :(得分:0)

io.TextIOWrapper可以使用io.BytesIO个对象。

你(几乎)传递它,除了你添加.file(为什么??),这不是io.BytesIO类的一个字段(request.files['portfolios']是已经有io.BytesIO个对象

只是做:

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