Python:判断FTP服务器目录里是文件夹还是文件的方案!

Python原生的ftplib模块本身并不支持分辨FTP服务器上到底是文件夹还是文件。在这里,我总结了一个办法。

运行环境 Runtime environment

1
2
3
操作系统 : Windows10  
IDE: JetBrains Python 2018.2.4 x64
语言: Pytthon 3.65

背景

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
20
def 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服务器:
1.png

使用示例代码判断的效果图:
2.png

×

也就放着玩的

扫码支持
扫码打赏,其实感觉也没人会给的。。

打开支付宝扫一扫,即可进行扫码打赏哦

文章目录
  1. 1. 运行环境 Runtime environment
  • 背景
  • 代码实例
  • ,