Ошибка получения запрошенного URL-адреса при запуске кода фляги - PullRequest
0 голосов
/ 01 мая 2019

Создал веб-приложение и сумел создать функцию для очистки CSV-файлов из Google My Business Export. Однако, когда я запускаю функцию с написанным мной кодом, я получаю следующее сообщение об ошибке:

Не найдено

Запрошенный URL не найден на сервере. Если вы ввели URL вручную проверьте свою орфографию и попробуйте снова.

Не уверен, где я иду не так

mport os
import pandas as pd
from flask import Flask, request, redirect, url_for
from flask import Flask, make_response
from werkzeug.utils import secure_filename

UPLOAD_FOLDER = './Downloads/gmbreports'
if not os.path.exists(UPLOAD_FOLDER):
    os.makedirs(UPLOAD_FOLDER)

ALLOWED_EXTENSIONS = 'csv'

app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
def allowed_file(filename):
    return '.' in filename and \
           filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS

def transform(text_file_contents):
    disc = open('clean.csv')
    disc2 = open('clean_two.csv','w')
    #cleaning up csv
    for row in disc:
        row = row.strip()
        row = row[1:-1]
        row = row.replace('""','"')
        disc2.write(row+'\n')
    disc2.close()
    disc.close()
    discovery = pd.read_csv('clean_two.csv')
    discovery_clean = discovery.iloc[1:]
    cols = list(discovery_clean.columns[4:])
    discovery_clean[cols] = discovery_clean[cols].apply(pd.to_numeric,errors='coerce')
    return discovery_clean

@app.route('/', methods=['GET', 'POST'])
def upload_file():
    if request.method == 'POST':
        if 'file' not in request.files:
            flash('No file part')
            return redirect(request.url)
        file = request.files['file']
        if file.filename == '':
            flash('You need to upload a csv file')
            return redirect(request.url)
        if file and allowed_file(file.filename):
            filename = secure_filename(file.filename)
            file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
            return redirect(url_for('uploaded_file',
                                    filename=filename))
    return '''
    <!doctype html>
    <title>Google My Business Discovery Report Builder</title>
    <h1>Upload GMB Discovery csv</h1>
    <form action="\transform" method="post" enctype="multipart/form-data">
      <p><input type="file" name="file">
         <input type="submit" value=Upload>
    </form>
    '''
@app.route('/transform',methods=["POST"])
def transform_view():
    request_file=request.files['file']
    request_file.save('clean.csv')
    if not request_file:
        return "No file"
    result = transform()
    print(result)

    response = make_response(result)
    response.headers["Content-Disposition"] ="attachment; filename=result.csv"
    return response


if __name__=='__main__':
    app.run()

Примечание: я получаю это сообщение об ошибке после запуска скрипта и загрузки CSV. Желаемый результат - загрузить CSV-файл и показать его на моем экране в виде таблицы очищенных данных

1 Ответ

2 голосов
/ 01 мая 2019

Здесь много проблем. Во-первых, Wondercricket прав насчет формы действий. Его нужно изменить на «/ transform».

Как только это будет сделано, вы все еще получаете внутреннюю ошибку сервера. В этом случае ваша transform функция определяется как принимающая один параметр, но она не вызывается с одним. Просто измените

def transform(text_file_contents):

до

def transform():

Это должно позволить загрузке произойти, и преобразование будет запущено. Тем не менее, есть еще одна последняя проблема. transform возвращает панду DataFrame, которую Flask не может использовать в качестве ответа. Изменить

response = make_response(result)

до

response = make_response(result.to_csv())

и тебе надо идти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...