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



我能够使用以下语法将文件从 S3 上传到 SFTP 位置@Martin使用 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

使用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将引用ParamikoSFTPClient类,而不是pysftpConnection类。正如ParamikoSFTPClient.listdir_attrSFTPClient.rename方法的行为与pysftp相同。

相关内容

最新更新