You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask文件上传报错:TypeError: convert()缺少必填参数'filename'

Fixing the TypeError: convert() missing 1 required positional argument: 'filename' in Your Flask CSV Upload App

Hey there! Let's break down this error you're facing—it's super common when you're getting started with file uploads in Flask, so don't worry, we'll get it sorted quickly.

What's Causing This Error?

That error message tells us exactly what's wrong: when you're calling your convert() function, you aren't passing the required filename argument it needs. This usually happens in one of two ways:

  • Your Flask route isn't correctly capturing the uploaded file's path/name to pass to convert().
  • You're calling convert() without any arguments (like convert() instead of convert(some_filename)).

Step-by-Step Fix with Example Code

Let's walk through a complete, working example that handles CSV uploads, processes the file, and returns the modified CSV. I'll include comments to explain each part:

First, let's define our convert() function (adjust the processing logic to match your needs):

def convert(filename):
    # Import pandas (or use built-in csv module if you prefer)
    import pandas as pd
    # Read the original CSV
    df = pd.read_csv(filename)
    
    # --- Your custom processing logic goes here ---
    # Example: Add a new column with doubled values from an existing column
    if 'value' in df.columns:
        df['doubled_value'] = df['value'] * 2
    # ---------------------------------------------
    
    # Save the processed CSV with a unique name
    processed_filename = f"processed_{filename.split('/')[-1]}"
    df.to_csv(processed_filename, index=False)
    return processed_filename

Now, the Flask route that handles uploads and calls the converter correctly:

from flask import Flask, request, send_file
import os

app = Flask(__name__)

# Set up a folder to store uploaded files (creates it if it doesn't exist)
UPLOAD_FOLDER = 'temp_uploads'
os.makedirs(UPLOAD_FOLDER, exist_ok=True)
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER

@app.route('/', methods=['GET', 'POST'])
def upload_and_process():
    if request.method == 'POST':
        # Check if a file was included in the request
        if 'csv_file' not in request.files:
            return "No file uploaded—please select a CSV first!"
        
        uploaded_file = request.files['csv_file']
        
        # Make sure a file was actually selected
        if uploaded_file.filename == '':
            return "No file selected—choose a CSV to upload."
        
        # Validate that the file is a CSV
        if uploaded_file and uploaded_file.filename.endswith('.csv'):
            # Save the uploaded file to our temp folder
            file_path = os.path.join(app.config['UPLOAD_FOLDER'], uploaded_file.filename)
            uploaded_file.save(file_path)
            
            # Call convert() WITH the required filename argument
            processed_file = convert(file_path)
            
            # Send the processed CSV back as a download
            return send_file(processed_file, as_attachment=True)
        
        return "Invalid file type—only CSV files are allowed."
    
    # If it's a GET request, show the upload form
    return '''
    <!doctype html>
    <title>CSV Processor</title>
    <h1>Upload Your CSV to Process</h1>
    <form method="POST" enctype="multipart/form-data">
      <input type="file" name="csv_file" accept=".csv" required>
      <button type="submit">Upload & Process</button>
    </form>
    '''

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

Key Things to Check in Your Own Code

  • Form Enctype: Make sure your HTML form has enctype="multipart/form-data"—this is required for file uploads to work in Flask.
  • Argument Passing: Double-check that when you call convert(), you're passing the filename/path of the uploaded file (like convert(file_path) instead of just convert()).
  • File Validation: Always check that the uploaded file is a CSV to avoid unexpected errors during processing.

Bonus: Clean Up Temporary Files

To avoid cluttering your server with old files, you can delete the original and processed files after sending them:

import os
from flask import after_this_request

# ... inside the POST route, after getting processed_file ...
@after_this_request
def cleanup(response):
    try:
        os.remove(file_path)
        os.remove(processed_file)
    except Exception as e:
        print(f"Error cleaning up files: {e}")
    return response

If you still run into issues, feel free to share snippets of your actual convert() function and route code, and we can troubleshoot further!

内容的提问来源于stack exchange,提问作者Murakma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 09:05:16