我想检查是否有更快的方法从物理计算机上的文件夹中不存在的 SFTP 下载数据。问题是这些文件是 5 分钟间隔的快照,而当前的 SFTP 文件夹有数千个(从 2016 年 8 月起至少每 5 分钟一次)。
我计划询问客户他们是否可以清理 SFTP 并有一个删除旧数据的过程,但同时我也想改进我的下载代码。
本质上,我检查 SFTP 上的每个文件夹,然后检查我计算机上的相应文件夹。如果该文件不存在,那么我下载它(我现在使用的是 Windows 10)。即使列出所有文件并检查它们是否存在也需要很长时间(仅其中一个文件夹需要 1400 秒,这意味着我无法尝试每 5 分钟运行一次)。
with pysftp.Connection(host, username, password, port, cnopts) as sftp:
logger.info('Server connected')
for folder in folders:
sftp.chdir(folder)
logger.info('Downloading data from the {} folder'.format(folder))
for file in sftp.listdir():
if file not in os.listdir(os.path.join(path, folder.lower())) and sftp.isfile(file):
logger.info('Downloading: {}'.format(file))
os.chdir(os.path.join(path, folder.lower()))
sftp.get(file, preserve_mtime=True)
以下是其中一个文件夹的确切文件名结构:
文件名-2016-12-06-08-55-05-to-09-00-17.csv
这一个文件夹(共 7 个文件夹)有 30,000 个文件(只有 129MB 的数据)