Python原生的ftplib模块本身并不支持分辨FTP服务器上到底是文件夹还是文件。在这里,我总结了一个办法。
运行环境 Runtime environment
1 | 操作系统 : Windows10 |
背景
Python原生的ftplib模块本身并不支持分辨FTP服务器上到底是文件夹还是文件。
也许会有人认为为啥不用os.path.isdir()和os.path.isfile()方法来分辨,在这里我可以很明确的讲。
对于在FTP服务器进行分辨文件夹还是文件这个需求上,os.path.isdir()和os.path.isfile()几乎没有作用!误判率极高!
代码实例
经过一番思考,我想出了这样的解决思路。
使用ftplib模块的ftp.cwd()方法向目录下所有元素发出打开目录的请求,
然后用try错误抓取错误信息,
最后通过对错误信息进行if判断,来达成分辨FTP服务器某一目录下谁是文件谁是文件夹的目的。
关键代码示例如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20def checkFileDir(ftp,file_name):
"""
判断当前目录下的文件与文件夹
:param ftp: 实例化的FTP对象
:param file_name: 文件名/文件夹名
:return:返回字符串“File”为文件,“Dir”问文件夹,“Unknow”为无法识别
"""
rec = ""
try:
rec = ftp.cwd(file_name) # 需要判断的元素
ftp.cwd("..") # 如果能通过路劲打开必为文件夹,在此返回上一级
except ftplib.error_perm as fe:
rec = fe # 不能通过路劲打开必为文件,抓取其错误信息
finally:
if "Not a directory" in str(rec):
return "File"
elif "Current directory is" in str(rec):
return "Dir"
else:
return "Unknow"
使用FileZilla客户端查看FTP服务器:
使用示例代码判断的效果图: