[英]Can we get the timestamp information with os.listdir in Python (like ls -l)?
我與SFTP
服務器聯系,並根據修改后的時間戳顯示文件。
目前,它是使用以下方法完成的:
files = os.listdir(SFTP)
files
並使用os.stat
獲取時間戳。 當SFTP在不同的服務器上時,步驟2中的循環非常昂貴,因為它必須為每個文件從服務器向SFTP進行網絡調用。
有沒有辦法使用os.listdir
或類似的API來獲取文件和修改的時間?
我正在使用Windows后端,通常使用win32wnet.WNetAddConnection2程序包完成SFTP連接。 通用解決方案將很有幫助,即使不是特定解決方案也可以。
如果您能夠將一行命令發送到服務器,則可以[os.stat(i) for i in os.listdir()]
如果那對您不起作用,我想您可以做os.system("ls -l")
如果這些都不起作用,請告訴我!
如果您使用的是Windows,那么使用os.scandir()
(python 3.5+)或backport scandir
模塊會獲得很多收益: scandir.scandir()
這是因為在Windows(相對於Linux / Unix)上, os.listdir()
已經在后台執行了文件狀態統計,但結果被丟棄,除了名稱之外。 這會迫使您執行另一個stat
調用。
scandir
返回目錄條目列表,而不是名稱。 在Windows上,大小/對象類型字段已經填充,因此在條目上執行stat
(如下例所示)時,費用為零:
(取自https://www.python.org/dev/peps/pep-0471/ )
def get_tree_size(path):
"""Return total size of files in given path and subdirs."""
total = 0
for entry in os.scandir(path):
if entry.is_dir(follow_symlinks=False):
total += get_tree_size(entry.path)
else:
total += entry.stat(follow_symlinks=False).st_size
return total
因此,只需將您的第一個os.listdir()
調用替換為os.scandir()
,您將以與簡單os.listdir()
相同的成本獲得所有信息。
(這在Windows上是最有趣的,而在Linux上則更少。我在Windows上的慢速文件系統上使用它,與舊版os.listdir
和os.path.isdir
相比,性能提高了8倍。 )
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.