gpt4 book ai didi

python - 我们可以在 Python 中使用 os.listdir 获取时间戳信息吗(如 ls -l)?

转载 作者:可可西里 更新时间:2023-11-01 09:47:10 25 4
gpt4 key购买 nike

我联系一个 SFTP 服务器并根据修改后的时间戳显示文件。

目前,它是使用类似的东西完成的:

  1. files = os.listdir(SFTP)
  2. 遍历文件并使用os.stat获取时间戳。
  3. 用 Python 对最终列表进行排序。

当 SFTP 位于不同的服务器上时,第 2 步中的循环成本非常高,因为它必须为每个文件从服务器到 SFTP 进行网络调用。

有没有办法使用 os.listdir 或类似的 API 获取文件和修改时间?

我使用的是 Windows 后端,SFTP 连接通常是使用 win32wnet.WNetAddConnection2 完成的包裹。一个通用的解决方案会很有帮助,如果不是一个特定的解决方案也应该没问题。

最佳答案

如果您使用的是 Windows,则可以使用 os.scandir()(python 3.5+)或向后移植 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 相比,性能提高了 8 倍在我的例子中是 os.path.isdir)

关于python - 我们可以在 Python 中使用 os.listdir 获取时间戳信息吗(如 ls -l)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48748280/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com