在Python中打开csv文件:内置。AttributeError AttributeError:“\u io.BytesIO”对象没有属性“file”

在Python中打开csv文件:内置。AttributeError AttributeError:“\u io.BytesIO”对象没有属性“file”,python,csv,flask,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

除了我前面的问题,关于如何用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")
{% 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 %}
我的flask/html代码如下:

@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")
{% 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 将打开的“names.csv”作为csvfile: reader=csv.dictReadercsv文件 对于读取器中的行: 打印行['first_name',行['last_name']

这不起作用,因为它给出了一个类型错误

然后,我按照建议删除了open,这导致了另一个错误。然后我删除了整个with块,这再次导致了一个错误。现在,上面的代码就是我现在的代码,它生成了以下错误:

内置属性错误 AttributeError:“\u io.BytesIO”对象没有属性“file”

谁能帮我结束我的csv导入噩梦??Txs

io.TextIOWrapper完全接受io.BytesIO对象

除了添加了一个.file why???,它不是io.BytesIO类请求的字段。files['portfolions']已经是io.BytesIO对象了

只要做:

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

您刚刚尝试过csvfile=TextIOWrapperrequest.files['portfolions',encoding=request.encodingHmmmmm,如果我这样做,我会得到一个AttributeError:'request'对象没有属性'encoding':这意味着你已经有了这个问题。我没有更改请求的类型。尝试忽略编码参数。