[英]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.