我試圖遍歷目錄的內容並確定每個項目是否是文件或文件夾。我可以做this link建議的解決方案:區分paramiko中的文件或目錄
>>> 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'
,因爲在我公認的非科學測試中,這似乎更快。
但是,這看起來非常黑客,所以我試圖檢查其他方法。在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'還是不''?
模式是八進制。你可以做'oct(integerValue)'來查看模式。 – sberry 2013-05-07 06:29:19