我试图遍历目录的内容并确定每个项目是文件还是文件夹。我可以执行此链接中建议的解决方案:
>>> for i in ftp.listdir():
... lstatout=str(ftp.lstat(i)).split()[0]
... if 'd' not in lstatout: print i, 'is a file'
...
这行得通,是的。作为旁注,我只是使用第一个字符而不是.split()
, 所以str(ftp.lstati(i))[0] != 'd'
,因为这在我公认的非科学测试中似乎更快。
但这似乎非常hacky,所以我尝试检查其他方法。在几个文件夹的 SFTP 属性中,我看到:
<SFTPAttributes: [ size=4096 uid=1002 gid=1002 mode=040755 atime=1358785383 mtime=1359475285 ]>
而在相同的文件中,我看到:
<SFTPAttributes: [ size=72 uid=1002 gid=1002 mode=0100644 atime=1367598914 mtime=1367598914 ]>
所以看起来模式是010[permissions]
针对文件的,040[permissions]
针对目录的(在我见过的几个目录中是一致的,但不能说它是通用的)。这似乎是获取项目属性的更好方法!但是,当我使用 时ftp.stat(i).st_mode
,我得到一个不同的值——16877
对于上述目录和33188
上述文件。
这些是什么意思?有没有办法可以将该整数转换为文件模式?(我试过谷歌,但找不到任何相关的东西。)或者,有没有什么好方法可以在不依赖str(lstat(i))
返回“d”或不“d”的函数的情况下确定这一点?