使用Python和ftplib,我正在编写一个泛型函数来检查FTP目录中的项目是文件还是目录。由于使用MLSD功能可能不一定适用于所有服务器(我的一个用例并未提供此功能),因此我尝试通过这种有效但粗略的方式来确定它,方法是尝试将目录更改为对象,如果对象是文件,将引发异常,并相应地设置文件类型。
file_type = '' try: ftp.cwd(item_name) file_type = 'dir' ftp.cwd(cur_path) except ftplib.error_perm: file_type = 'file'
我已经在Internet和图书馆文档中搜索了其他方法,但是找不到在大多数情况下都可以使用的方法。
例如,使用该dir函数,我可以检查第一个字符是否存在,'d'并且可以确定第一个字符,但是进一步阅读表明,并非所有输出都具有相同的格式。
dir
'd'
我在此方法中看到的最大缺陷是,如果我没有权限将目录更改为指定的文件夹;因此它将被视为文件。
有什么我想念的东西吗?
没有更好的方法(通常使用FTP协议,而不仅仅是ftplib)。
的MLST/MLSD是唯一正确的和可靠的方式。
MLST
MLSD
如果您不能使用MLST/ MLSD,则尝试使用CWD下一个最佳选择。
CWD
尝试解析LIST是一个后备选项。但是您需要知道服务器使用程序可以理解的列表格式。
LIST