Flask назначает содержимое файла CSV памяти и отображает содержимое на странице HTML - PullRequest
0 голосов
/ 10 мая 2018

Я пытаюсь создать приложение фляги, которое будет загружать CSV-файл, назначать его памяти и затем отображать содержимое на HTML-странице,

код, который я использую, как показано ниже, при запускекод и попытаться загрузить файл, я получаю следующее сообщение об ошибке,

AttributeError: '_io.BytesIO' объект не имеет атрибута 'file

Flask

@app.route('/upload', methods=['GET', 'POST'])
def upload():
    if request.method == 'POST':
        file = request.files['file']
        if file and allowed_file(file.filename):
            filename = secure_filename(file.filename)
            file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))

            ## snippet to read code below
            file.stream.seek(0) # seek to the beginning of file
            myfile = file.file # will point to tempfile itself
            dataframe = pd.read_csv(myfile)
            ## end snippet

            return "yatta"
        else:
            return "file not allowed"

    return render_template("upload.html")

HTML

<div class="form-group">
    <form method="POST" enctype=multipart/form-data>
    <input class="btn btn-sm btn-primary" type="file" name="file">
    <input type="submit" value='upload'>
</div>
<table border="1" cellpadding="5" cellspacing="5">
            {% for row in data %}
                <tr>
                {% for d in row %}
                    <td>{{ d }}</td>
                {% endfor %}
            </tr>
            {% endfor %}
        </table>

1 Ответ

0 голосов
/ 13 мая 2018

Я не знаком с этой конкретной реализацией, но, поскольку вы используете file.stream.seek (0) , я думаю

myfile = file.stream

решит вашу проблему - частично.

Хотя частично? Поскольку ваш поток является потоком байтов - и если вы используете Python3, pandas.read_csv требует текстовый файл / поток - то есть Unicode.

Я использовал это преобразование, чтобы решить проблему

unicode_stream = io.StringIO(download_stream.getvalue().decode())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...