python ftplib上传文件名乱码的解决办法

 更新时间:2025年04月16日 11:02:47   作者:handsome1234  
本文主要介绍了python ftplib上传文件名乱码的解决办法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

公司安排我用RPA把各电商平台昨天直播和视频相关的曝光、销售等数据下载下来,我用rpa基本一个星期完成了,最后用影刀RPA自带的ftp文件上传工具,都指定的ftp服务器上,用RPA上传后,文件名都是乱码,默认RPA内嵌的ftplib的默认编码是拉丁文编码,上传中文就是乱码,默认组件又没有其他设置(比方说编码方面),于是被迫放弃现场的组件,自行编写代码以期解决,百度了一下:

1、尝试上传前,按照提示把文件名转成utf-8,

def upload(f, remote_path, local_path):
    fp = open(local_path, "rb") #,encoding='utf-8'
    buf_size = 1024
    # f.storbinary("STOR {}".format(remote_path), fp, buf_size)
    # f.storbinary("STOR {}"+remote_path, fp, buf_size)
    # f.storbinary("STOR {}".format(remote_path)+r"/20250413_抖音_XXX服饰旗舰店_视频合作视频数据_1744606680.xlsx", fp, buf_size)
    # f.storbinary("STOR "+remote_path+r"/aa.xls", fp, buf_size)   #单文件ok
    filenam2=local_path[local_path.rfind('\\')+1:].strip()
    print(filenam2+"#"+remote_path+"#"+local_path)
    filenam3=filenam2.encode('utf-8').decode('iso-8859-1')
    f.storbinary("STOR "+remote_path+filenam3, fp, buf_size)


    fp.close()
    

乱码还在,不起作用。

2、网上有说改源码的,我这里是用影刀RPA作的,找他的源码,电脑D盘搜索中。最后在我改源码前,找到了更好的办法,故这个方法没有再试了。

3、把编码设置成通用的utf-8还是不行

4、把编码设置成通用的拉丁文还是不行:

ftp.encoding="iso-8859-1"

5、看文档说可以使用paramiko 我安装完了,测试:

def upload_file_via_ftp(hostname, port, username, password, local_file_path, remote_file_path):
    # 创建SSH客户端实例
    client = paramiko.SSHClient()
    # 自动添加策略,保存服务器的主机名和密钥信息
    # client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    
    try:
        # 连接到服务器
        client.connect(hostname, port, username, password)
        
        # 使用SFTPClient进行文件传输
        sftp = client.open_sftp()
        sftp.put(local_file_path, remote_file_path)
        print(f"文件 {local_file_path} 已成功上传到 {remote_file_path}")
        
        # 关闭SFTP连接
        sftp.close()
    except Exception as e:
        print(f"上传文件时发生错误: {e}")
    finally:
        # 关闭SSH连接
        client.close()

报: 

Error reading SSH protocol banner

不知道ftp服务器上用哪个软件设置的ftp功能,不知道知不知支持ssh,如果不支持的话,我就是白费劲。

6、又看文档说 pysftp 支持中文,我安装,测试:

def main(args):
    with pysftp.Connection(glv['gvarFtpSerIP'], username=glv['gvarFtpUid'], password=glv['gvarFtpPs'],port=30000) as sftp:
    
    # sftp.get('远程中文文件.txt', '本地文件.txt')  # 下载
        sftp.put(r"C:\20250413_抖音_XXX服饰旗舰店_视频合作视频数据_1744606680.xlsx", '20250413_抖音_XXXX服饰旗舰店_视频合作视频数据_1744606680.xlsx')  # 上传
        sftp.close()

报:'Connection' object has no attribute '_sftp_live'  ,查了一圈,没找到类似login 和 openftp的方法,暂时没有好的办法

7、又转而看看内嵌的ftplib,之前都是设置 utf-8,我灵机一动,为啥不设置 gbk呢?于是测试一下,效果可以。

最后代码如下:

from ftplib import FTP


def upload(f, remote_path, local_path):
    fp = open(local_path, "rb") #,encoding='utf-8'
    buf_size = 1024
    # f.storbinary("STOR "+remote_path+r"/aa.xls", fp, buf_size)   #纯英文文件名ok
    filenam2=local_path[local_path.rfind('\\')+1:].strip()
    print(filenam2+"#"+remote_path+"#"+local_path)
    f.storbinary("STOR "+remote_path+filenam2, fp, buf_size)   

    fp.close()


def main(args):
    ftp = FTP()
    ftp.encoding='gbk'#  ok  这里最重要

    ftp.connect(glv['gvarFtpSerIP'], 30000)      # 第一个参数可以是ftp服务器的ip或者域名,第二个参数为ftp服务器的连接端口,默认为21
    ftp.set_debuglevel(2) 
    ftp.login(glv['gvarFtpUid'], glv['gvarFtpPs'])     # 匿名登录直接使用ftp.login()
    ftp.cwd(glv['gvarRemotPath'])                # 切换到tmp目录
   
    upload(ftp,"/sjzt/pp/ds/douyin/",r"C:\[20250411]_[抖音]_[XXXX服饰旗舰店]_[视频合作视频数据]_[1744461854].xlsx")   # 将当前目录下的a.txt文件上传到ftp服务器的tmp目录,命名为ftp_a.txt  
    # 上面也是Ok 的
    # download(ftp, "ftp_a.txt", "b.txt")  # 将ftp服务器tmp目录下的ftp_a.txt文件下载到当前目录,命名为b.txt

    ftp.quit()

到此这篇关于python ftplib上传文件名乱码的解决办法的文章就介绍到这了,更多相关python ftplib上传文件名乱码内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • Python通过rembg实现图片背景去除功能

    Python通过rembg实现图片背景去除功能

    在图像处理领域,背景移除是一个常见且重要的任务,Python中的rembg库就是一个强大的工具,它基于深度学习技术,能够准确、快速地移除图像背景,本文将结合多个实际案例,详细介绍rembg库的安装、基本用法、高级功能以及在实际项目中的应用,需要的朋友可以参考下
    2024-09-09
  • Python pomegranate库实现基于贝叶斯网络拼写检查器

    Python pomegranate库实现基于贝叶斯网络拼写检查器

    这篇文章主要为大家介绍了Python pomegranate库实现基于贝叶斯网络拼写检查器示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪<BR>
    2023-04-04
  • python 使用Tensorflow训练BP神经网络实现鸢尾花分类

    python 使用Tensorflow训练BP神经网络实现鸢尾花分类

    这篇文章主要介绍了python 使用Tensorflow训练BP神经网络实现鸢尾花分类,帮助大家更好的利用python进行深度学习,感兴趣的朋友可以了解下
    2021-05-05
  • python绘制三维图的详细新手教程

    python绘制三维图的详细新手教程

    通常我们用 Python 绘制的都是二维平面图,但有时也需要绘制三维场景图,下面这篇文章主要给大家介绍了关于python绘制三维图的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2022-08-08
  • python实现简单图书管理系统

    python实现简单图书管理系统

    这篇文章主要为大家详细介绍了python实现简单图书管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-11-11
  • Pandas 计算相关性系数corr()方式

    Pandas 计算相关性系数corr()方式

    这篇文章主要介绍了Pandas 计算相关性系数corr()方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • 提升Python编程水平必不可少的重构技巧

    提升Python编程水平必不可少的重构技巧

    在Python中,编写可读性强且Pythonic的代码是至关重要的,重构技巧是指通过调整代码结构和风格,使其更符合Python的惯例和标准,从而提高代码的可读性、简洁性和可维护性,本文将深入探讨八项重构技巧,帮助您编写更Pythonic的代码
    2024-01-01
  • 如何用python开发Zeroc Ice应用

    如何用python开发Zeroc Ice应用

    这篇文章主要介绍了如何用python开发Zeroc Ice应用,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下
    2021-01-01
  • python使用mysql的两种使用方式

    python使用mysql的两种使用方式

    pymsql是Python中操作MySQL的模块。这篇文章主要介绍了python使用mysql的两种使用方式,需要的朋友可以参考下
    2018-03-03
  • 如何将Pycharm中Terminal使用Powershell作为终端

    如何将Pycharm中Terminal使用Powershell作为终端

    这篇文章主要介绍了如何将Pycharm中Terminal使用Powershell作为终端问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05

最新评论