Streamlit 上传 CSV 文件,解析并推送到 FTP

Streamlit upload CSV file, parse it and push it to FTP

我正在尝试构建一个简单的 Streamlit 应用程序,我正在上传一个 CSV 文件,然后将其加载到数据框中,显示数据框,然后将其上传到预定义的 FTP 服务器。

第一部分工作正常,文件已成功上传并可视化,但我无法将其上传到 FTP 服务器。这是我的代码:

import ftplib

import pandas as pd
import streamlit as st

ftp_server = "ftp.test.com"
ftp_username = "user"
ftp_password = "password"

input_file = st.file_uploader("Upload a CSV File",type=['csv'])
if (input_file is not None) and input_file.name.endswith(".csv"):
    df = pd.read_csv(input_file, delimiter="\t", encoding = 'ISO-8859-1')
    st.dataframe(df)
    session = ftplib.FTP(ftp_server, ftp_username, ftp_password)
    file = open(input_file, "rb")
    session.storbinary(input_file.name, input_file)              
    input_file.close()                                    
    session.quit()
    st.success(f"The {input_file.name} was successfully uploaded to the FTP server: {ftp_server}!")

我收到一个错误

TypeError: expected str, bytes or os.PathLike object, not UploadedFile.

我正在使用 Streamlit v.1.1.0。

请注意,我已经简化了我的代码并替换了 FTP 凭据。在现实世界中,我可能会使用 try/except 进行会话连接等

  1. 我想你在这里得到了错误:

    file = open(input_file, "rb")
    

    该行既错误又无用(您永远不会使用 file)。删除它。

  2. 您可能需要在 read_csv 中阅读 input_file 回到开头:

    file_input.seek(0)
    
  3. 您缺少上传命令 (STOR) storbinary 调用:

    session.storbinary("STOR " + input_file.name, input_file)