当前位置: 首页 > 知识库问答 >
问题:

python怎么获取ftp服务器文件?

邹晟睿
2023-12-29

python连接ftp服务器,获取指定目录下的文件并下载,如果连接的时候指定utf-8编码,但是ftp服务器文件包含了非utf8编码的文件(ftp服务器上文件可能从windows上传存在gbk编码的文件),这样以下程序会报错'utf-8' codec can't decode byte 0xc6 in position 304: invalid continuation byte,除了限制上传的时候必须使用utf-8编码外,有其他办法来兼容吗?

import ftplibftp_cli = ftplib.FTP()ftp_cli.encoding = 'utf-8'ftp_cli.connect('10.21.x.x', 10021)ftp_cli.login('ftpuser', 'ftpuser')wdir = ''file_list = []ftp_cli.retrlines(f"LIST {wdir}", file_list.append)print(file_list)

共有1个答案

程祺
2023-12-29
import ftplibimport iodef decode_filename(filename):    try:        return filename.decode('utf-8')    except UnicodeDecodeError:        return filename.decode('gbk')ftp_cli = ftplib.FTP()ftp_cli.encoding = 'utf-8'ftp_cli.connect('10.21.x.x', 10021)ftp_cli.login('ftpuser', 'ftpuser')wdir = ''file_list = []ftp_cli.retrlines(f"LIST {wdir}", file_list.append)print(file_list)for file in file_list:    filename = decode_filename(file[3])  #获取文件名,注意,file[3]是文件名在返回结果中的位置,这个位置可能会因为FTP服务器和操作系统的不同而不同,你可能需要调整这个位置。    with io.open(filename, 'wb') as f:  # 打开本地文件,准备写入数据        ftp_cli.retrbinary(f"RETR {file[3]}", f.write)  # 从FTP服务器下载文件,并将数据写入本地文件。这里file[3]是文件名在返回结果中的位置,这个位置可能会因为FTP服务器和操作系统的不同而不同,你可能需要调整这个位置。ftp_cli.quit()

在这个修改过的程序中,我增加了一个名为decode_filename的函数,这个函数会尝试将文件名从utf-8编码解码,如果解码失败,就尝试从gbk编码解码。然后在下载文件的时候,将文件名传递给这个函数进行解码。这样就可以处理包含非utf-8编码文件名的文件了。

 类似资料:
  • 这是我从FTP服务器导入文件的脚本。< br >但是我不确定什么是< code>remotePickupDir以及这个脚本是否正确?

  • 我正试图下载一些公共数据文件。我通过screensrap获取指向文件的链接,这些文件看起来都是这样的: 我在Requests library网站上找不到任何文档。

  • 我正在尝试从我的ftp服务器读取csv文件。链接看起来像: 然而,d3不喜欢它。 在chrome中,我得到以下错误: 我有大量的数据文件~12GB,ftp服务器是我在线存储数据最方便的方式 有没有办法解决这个问题?

  • Xlight FTP服務器是非常容易使用的FTP服務器。 為了保證高性能,FTP服務器全部用C語言寫成,服務器運行時佔用很少的系統資源。它具有高效網絡算法,在大量用戶情況下, 可以充分利用FTP服務器帶寬, 能夠輕鬆處理數千用戶的同時下載。 Xlight FTP 服務器有三個版本:個人版本,標準版本,專業版本。 個人版本只對個人使用是免費的, 你可以點擊這裡察看三個版本在功能上的不同。 Xligh

  • 问题内容: 是否可以在python中使用一行命令来做一个简单的ftp服务器?我希望能够以这种快速和临时的方式来执行此操作,而无需将FTP服务器安装到Linux机器上。最好是使用内置的python库的方法,因此无需额外安装。 问题答案: 强制性扭曲示例: 可能有用:

  • 我正试图从ftp服务器检索一个文件,但我得到如下错误。请你帮帮我好吗 导入java.io.BufferedOutputStream; 导入java.io.file; 导入java.io.FileOutputStream; 导入java.io.IOException; 导入java.io.InputStream; 导入java.io.OutputStream; 导入java.text.DateFor