Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

260
Views
Subir 2 archivos individuales a través de Flask para el procesamiento de Python

Comencé a jugar con Flask y estoy buscando convertir algunos scripts de Python fáciles para poder ejecutarlos a través de una interfaz web. Principalmente herramientas de ajuste de datos.

Entonces, la mayoría de las herramientas que tengo ejecutando a través de la línea de comandos usan 2 hojas de cálculo y luego realizan operaciones entre ellas usando pandas (buscar diferencias, actualizar información, etc.).

Sin embargo, parece que no puedo entender cómo crear la interfaz necesaria para permitir que los usuarios que ven el sitio tengan 2 botones de carga (1 para cada archivo) y luego, debajo, tienen un botón de proceso donde ocurre la magia.

Toda la documentación que he encontrado trata sobre la carga de un solo archivo (y luego ejecuta cualquier proceso) o permite la carga de múltiples archivos con un solo botón de carga.

Entonces, una plantilla básica sería algo como:

 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <div> <h2>Upload Current File Here</h2> <form method=post enctype=multipart/form-data> <input type=file name=curfile> <input type=submit value=Upload> </form> </div> <div> <h2>Upload New File Here</h2> <form method=post enctype=multipart/form-data> <input type=file name=newfile> <input type=submit value=Upload> </form> </div> </body> </html>

Ahora para app.py, esta es la versión que cargará un solo archivo y proceso.

 from flask import Flask, request, render_template import pandas as pd from werkzeug.utils import secure_filename app = Flask(__name__) app.config["ALLOWED_FILE_EXTENSIONS"] = ["xlsx"] app.config["MAX_IMAGE_FILESIZE"] = 16 * 1024 * 1024 @app.route('/', methods=['GET', 'POST']) def upload(): if request.method == 'POST': dfcur = pd.read_excel(request.files.get('curfile')) return render_template('upload.html') if __name__ == '__main__': app.run(debug=True)

Espero que lo que publiqué tenga sentido, he estado revisando muchas notas en línea y aún no he encontrado nada que aborde el flujo de trabajo. Sé que el problema es que el archivo se carga y luego se procesa la plantilla, mientras que quiero permitir que ambos se carguen antes de hacer nada.

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Después de investigar un poco y repasar el código, logré que funcionara agregando una solicitud adicional. archivos para el nombre de archivo adicional.

Todavía tengo que incorporar qué hacer con los archivos, ya que este código es básicamente del tutorial de carga del matraz, pero esto es lo que funciona ahora.

archivo py

 import os from flask import Flask, flash, request, redirect, url_for, send_from_directory from flask.templating import render_template from werkzeug.utils import secure_filename UPLOAD_FOLDER = 'uploads/' ALLOWED_EXTENSIONS = {'txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif'} app = Flask(__name__) app.config['SECRET_KEY'] = 'secret' app.config['MAX_CONTENT_LENGTH'] = 16 * 1000 * 1000 app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER def allowed_file(filename): return '.' in filename and \ filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS @app.route('/uploads/<name>') def download_file(name): return send_from_directory(app.config["UPLOAD_FOLDER"], name) @app.route('/', methods=['GET', 'POST']) def upload_file(): if request.method == 'POST': # check if the post request has the file part if 'curfile' not in request.files or 'newfile' not in request.files: flash("Sorry, the upload didn't send all of the data!") return redirect(request.url) curfile = request.files["curfile"] newfile = request.files["newfile"] # If the user does not select a file, the browser submits an # empty file without a filename. if curfile.filename == "" or newfile.filename == "": flash('You need to upload 2 files!') return redirect(request.url) if curfile and allowed_file(curfile.filename): filename = secure_filename(curfile.filename) curfile.save(os.path.join(app.config['UPLOAD_FOLDER'], filename)) return redirect(url_for('download_file', name=filename)) return render_template("app2.html")

archivo de plantilla

 <!DOCTYPE html> <head> <title>Test</title> </head> <html> <body> <form method="post" enctype="multipart/form-data"> <h2>Upload Current File</h2> <input type="file" name="curfile"> <h2>Upload New File</h2> <input type="file" name="newfile"> <p></p> <input type="submit" value="Upload"> </form> {% with messages = get_flashed_messages() %} {% if messages %} <ul class="flashes"> {% for message in messages %} <div class="message_flash">{{ message }}</div> {% endfor %} </ul> {% endif %} {% endwith %} </body> </html>
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!