我联系SFTP
服务器并根据修改后的时间戳显示文件。
目前,使用以下内容完成:
files = os.listdir(SFTP)
files
并使用os.stat
获取时间戳。当SFTP位于不同的服务器上时,步骤2中的这种循环非常昂贵,因为它必须为每个文件从服务器向SFTP进行网络呼叫。
有没有办法使用os.listdir
或类似的API获取文件和修改时间?
我使用的是Windows后端,SFTP连接通常使用win32wnet.WNetAddConnection2包完成。一般的解决方案会有所帮助,如果不是特定的解决方案也应该没问题。
答案 0 :(得分:2)
您应该使用特殊库,例如documentation或sftp,它们提供对您有帮助的特定工具。 此外,您可以尝试在服务器上调用有趣的命令。
答案 1 :(得分:2)
如果您能够向服务器发送一行命令,则可以执行 <li *ngFor="let item of serviceList; let i = index;">
<button *ngIf="currentTools contains i" (click)="processService(item)">
Run Service</button>
</li>
如果这不适合你,我想你可以做[os.stat(i) for i in os.listdir()]
如果这些都不起作用,请告诉我!
答案 2 :(得分:2)
如果您使用的是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
相比,性能提升了8倍,然后是{{1在我的情况下)