我正在尝试获取远程Linux服务器目录中的最新文件。SFTP服务器中的文件每4小时创建一次,文件的特定名称以filegen_date_hour.json
开头,如下例所示。在这种情况下,需要将最新文件“filegen_20200101_0800.json”传输到我的本地目录
filegen_20200101_0000.json
filegen_20200101_0400.json
filegen_20200101_0800.json
我在下面使用了Python 3代码,但出现了错误
latestFile = max(listFile, key=os.path.getctime)
ValueError: max() arg is an empty sequence
下面是SFTP代码
myHostname = "192.168.100.10"
myUsername = "user"
myPassword = "password"
cnopts = pysftp.CnOpts()
cnopts.hostkeys = None
with pysftp.Connection(host=myHostname, username=myUsername, password=myPassword, cnopts=cnopts) as sftp:
with sftp.cd('/home/operation/genfiles/'):
fileDir = '/home/operation/genfiles/filegen_*.json'
**#file have specific pattern with filegen_*.json**
listFile = glob.glob(fileDir)
latestFile = max(listFile, key=os.path.getctime)
sftp.get(latestFile)
感谢您在这件事上的帮助。感谢您的回复和帮助
首先,不能使用
glob
列出SFTP服务器上的文件。glob
不会神奇地开始查询SFTP服务器,因为您之前已经打开了一个SFTP连接。它仍将查询本地文件系统使用pysftp^{} 。虽然它不支持通配符,但您必须在本地筛选所需的文件。像这里:
List files on SFTP server matching wildcard in Python using Paramiko
只有这样,您才能尝试查找最新的文件。 通常,您可以使用文件修改时间,如下所示:} 的代码相同
How to download only the latest file from SFTP server with Paramiko?
代码用于Paramiko
SFTPClient.listdir_attr
,但Pystp^{但在您的情况下,我不确定您是否可以依赖修改时间戳。看起来您实际上想要在文件名中使用时间戳。使用文件名格式,您只需按字典顺序选择最后一个文件
强制性警告:不要设置
cnopts.hostkeys = None
,除非您不关心安全性。有关正确的解决方案,请参见Verify host key with pysftp相关问题 更多 >
编程相关推荐