在 Python 中将一个 SFTP 文件夹中的所有文件存档到另一个文件夹

问题描述 投票:0回答:1

我能够使用 @Martin Prikryl 给出的以下语法成功地将文件从 S3 上传到 SFTP 位置使用 Boto 3 将文件从 AWS S3 传输到 SFTP。

with sftp.open('/sftp/path/filename', 'wb') as f: s3.download_fileobj('mybucket', 'mykey', f)
我需要将当前日期的文件从 S3 上传到 SFTP 之前,将先前的文件从当前文件夹存档到 

archive

 文件夹中

我试图使用通配符来实现,因为有时,在星期一运行时,您将无法找到星期日的文件,而您拥有上一个文件,即星期五的文件。所以我想实现之前的任何文件,无论日期如何。

示例

我有如下文件夹,需要将

filename_20200623.csv

移动到
ARCHIVE
文件夹,然后将上传新文件
filename_20200625.csv

MKT ABC ARCHIVE filename_20200623.csv
预计

MKT ABC ARCHIVE filename_20200623.csv filename_20200625.csv
    
python sftp paramiko pysftp
1个回答
3
投票
使用

Connection.listdir_attr

 检索目录中所有文件的列表,过滤出您感兴趣的文件,然后使用 Connection.rename 
将它们一一移动
:

remote_path = "/remote/path" archive_path = "/archive/path" for f in sftp.listdir_attr(remote_path): if (not stat.S_ISDIR(f.st_mode)) and f.filename.startswith('prefix'): remote_file_path = remote_path + "/" + f.filename archive_file_path = archive_path + "/" + f.filename print("Archiving %s to %s" % (remote_file_path, archive_file_path)) sftp.rename(remote_file_path, archive_file_path)


对于未来使用 Paramiko 的读者来说,代码将是相同的,当然,除了

sftp

 将引用 
Paramiko SFTPClient
,而不是 pysftp
Connection
 类。由于 Paramiko 
SFTPClient.listdir_attr
SFTPClient.rename
 方法的行为与 pysftp 的行为相同。

© www.soinside.com 2019 - 2024. All rights reserved.