返回顶部
分享到

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

python 来源:互联网 作者:佚名 发布时间:2025-06-08 17:48:48 人浏览
摘要

公司安排我用RPA把各电商平台昨天直播和视频相关的曝光、销售等数据下载下来,我用rpa基本一个星期完成了,最后用影刀RPA自带的ftp文件上传工具,都指定的ftp服务器上,用RPA上传后,文件

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

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

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、把编码设置成通用的拉丁文还是不行:

1

ftp.encoding="iso-8859-1"

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

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 支持中文,我安装,测试:

1

2

3

4

5

6

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呢?于是测试一下,效果可以。

最后代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

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()


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。

您可能感兴趣的文章 :

原文链接 :
    Tag :
相关文章
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计