загруженный файл не может быть повторно использован в колбе - PullRequest
0 голосов
/ 07 ноября 2019

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

Iсмог загрузить загруженный файл в колбу и активировать код Python как функцию, но как только я использую загруженный файл в первой строке, где мне нужно изменить файл, он возвращает мне ошибку: AttributeError: 'У объекта SpooledTevenFile 'нет атрибута' rename ' Я застрял, так как все еще довольно плохо знаком с флягой.

Вот часть route.py, в которую должен быть отредактирован файл загрузки:

@login_required
def open_file():
    '''Opens page with the file that should be edited.'''
    if request.method == 'POST':
        #check if the post request has the file part
        if 'file' not in request.files:
            flash('No file part')
            return render_template('2_choose_file.html')

        file_upload = request.files['file']

        #check if the uploaded file a CSV file is
        if file_upload and allowed_file(file_upload.filename):
            table1 = filter_csv(file_upload)
            table2 = table1.to_html(classes='my_class" id = "my_id')
            return render_template('3_filtered_file.html', data=table2)

    return render_template('2_choose_file.html')

Отслеживание ошибки:

  File "C:\Users\aa01725\AppData\Local\Continuum\anaconda3\lib\site-packages\flask\app.py", line 2309, in __call__
    return self.wsgi_app(environ, start_response)
  File "C:\Users\aa01725\AppData\Local\Continuum\anaconda3\lib\site-packages\flask\app.py", line 2295, in wsgi_app
    response = self.handle_exception(e)
  File "C:\Users\aa01725\AppData\Local\Continuum\anaconda3\lib\site-packages\flask\app.py", line 1741, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "C:\Users\aa01725\AppData\Local\Continuum\anaconda3\lib\site-packages\flask\_compat.py", line 35, in reraise
    raise value
  File "C:\Users\aa01725\AppData\Local\Continuum\anaconda3\lib\site-packages\flask\app.py", line 2292, in wsgi_app
    response = self.full_dispatch_request()
  File "C:\Users\aa01725\AppData\Local\Continuum\anaconda3\lib\site-packages\flask\app.py", line 1815, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "C:\Users\aa01725\AppData\Local\Continuum\anaconda3\lib\site-packages\flask\app.py", line 1718, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "C:\Users\aa01725\AppData\Local\Continuum\anaconda3\lib\site-packages\flask\_compat.py", line 35, in reraise
    raise value
  File "C:\Users\aa01725\AppData\Local\Continuum\anaconda3\lib\site-packages\flask\app.py", line 1813, in full_dispatch_request
    rv = self.dispatch_request()
  File "C:\Users\aa01725\AppData\Local\Continuum\anaconda3\lib\site-packages\flask\app.py", line 1799, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "C:\Users\aa01725\AppData\Local\Continuum\anaconda3\lib\site-packages\flask_login\utils.py", line 261, in decorated_view
    return func(*args, **kwargs)
  File "C:\Users\aa01725\newproject\my_app\routes.py", line 83, in open_file
    table1 = filter_csv(file_upload)
  File "C:\Users\aa01725\newproject\my_app\TEST_filter.py", line 42, in filter_csv
    file_in.rename(columns=dict(zip(columns, new_column_names)), inplace=True)
  File "C:\Users\aa01725\AppData\Local\Continuum\anaconda3\lib\site-packages\werkzeug\datastructures.py", line 2745, in __getattr__
    return getattr(self.stream, name)
AttributeError: 'SpooledTemporaryFile' object has no attribute 'rename'

Часть кода Python, в которой отображается ошибка.

file_in.rename(columns=dict(zip(columns, new_column_names)), inplace=True)

Любая помощь будет великолепна

1 Ответ

0 голосов
/ 08 ноября 2019

Я нашел обходной путь. На основании этого ответа . Просто сохраните загруженный файл на сервер и с помощью pd.read_csv проанализируйте его, как я хочу, и снова используйте его.

@app.route('/3_filtered_file', methods=['GET', 'POST'])
@login_required
def open_file():
'''Opens page with the file that was imported from the user.'''
if request.method == 'POST':
    #check if the post request has the file part
    if 'file' not in request.files:
        flash('No file part')
        return render_template('2_choose_file.html')

    file_upload = request.files['file']

    #check if the uploaded file a CSV file is
    if file_upload and allowed_file(file_upload.filename):
        filename = secure_filename(file_upload.filename)
        file_path = os.path.join(app.config['UPLOAD_FOLDER'], filename)
        file_upload.save(file_path)
        file_to_filter = pd.read_csv(file_path, sep=';', engine='python', encoding='ISO-8859-1')
        table1 = filter_csv(file_to_filter)
        table2 = table1.to_html(classes='my_class" id = "my_id')
        return render_template('3_filtered_file.html', data=table2)

return render_template('2_choose_file.html')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...