我正在连接到一个包含文件列表的 SFTP 文件夹。我需要按日期订购这些并提取最新的两个。
filepath= "/test/sftp/files/"
localpath= "C:/myfiles/"
os.get(filepath, localpath)
我可以使用
os.get
提取所有文件,但我尝试了 os.listdir
但这没有按我需要的日期排序。我查看了 os
图书馆,但找不到按日期订购的东西。
我在用Paramiko。
除了仅给出远程文件名称的
listdir
之外,paramiko还提供了一个listdir_attr
方法,该方法返回包含文件名的SFTPAttributes
列表以及一个st_mtime
字段(以及其他)。您只需在该 st_mtime
字段上对该列表进行排序,以获取按其(修改)日期排序的文件列表:
client = paramiko.client.SSHClient()
client.connect(...) # use your connection parameters here
sftp = client.open_sftp()
remote_files = [x.filename for x in sorted(sftp.listdir_attr(), key = lambda f: f.st_mtime)]
class MyClass1
{
public string DataTime { get; set; }
public string DataTimeUTC { get; set; }
public string Path { get; set; }
}
SftpClient client = new SftpClient(con);
client.Connect();
var files = client.ListDirectory("");
foreach (var file in files)
{
newData.AddRange(new List<MyClass1>() {
new MyClass1() { Path = file.Name, DataTime = $"{file.LastWriteTime}", DataTimeUTC = $"{file.LastWriteTimeUtc.Ticks}" } });
}
newData.Sort((a, b) => a.DataTimeUTC.CompareTo(b.DataTimeUTC));