我正在尝试使用Python通过API每天晚上将一个文件放到一个共享文件夹中。所有的发布代码都是有效的——我唯一不能得到的就是Python自动获取文件名并将其上传到SFTP
文件的命名约定是:fileYYMMDDHHMM.txt
(全部两位数字),因此如果它是在昨晚10:10pm生成的,那么它将以file1606272210.txt
的形式出现。如果我能让Python自动获取这个文件名,那么我就可以自动提交它了。这是我已经发现的非常接近(并且不会产生错误):
import datetime
import os.path, time
file = '/Users/Ryan/'
def modification_date(folderfile):
t = os.path.getmtime(folderfile)
return datetime.datetime.fromtimestamp(t)
mdate = modification_date(file)
md = mdate.strftime("%y%m%d%H%M")
它通过追加上次修改文件夹的时间来返回理论上可行的内容,因为该代码将返回类似file1606272214.txt
的内容。但问题是,我们的数据库会根据创建文件的时间自动追加分钟计时,而不是在文件到达我的文件夹时追加分钟计时。所以我通常会休息5分钟,但这从来不是100%的一致
我最初的想法是尝试编写一个循环,从我的修改日期脚本中减去一分钟,直到它真正找到文件为止——但我认为我在try/except
方面还不够好,还不能实现这一点。我也不确定这是否是最好的解决方案——不管什么都可以
有人能帮我弄清楚吗
所以,既然你的评论已经澄清,它将是一致的,总是最新的,你可以使用一些巧妙的小技巧
首先,
os
模块有一个名为os.listdir(path)
的命令—这将为您提供给定目录(“/Users/Ryan”上面)中文件的文件名。由于开头是一致的,而且数字是按降序排列的,所以可以使用内置的sorted()
对名称列表进行排序。这将对它们进行排序,以便最新的一个(最高的序号名称,因为数字是可预测的)将是最后一个。你可以list.pop()
关闭最后一个,或者直接访问它(list[-1]
),然后用它做你想做的事情(移动它等等)如果你在同一个目录中有额外的和/或静态文件,你可能需要过滤从你的东西开始的东西-列表理解可以做到这一点
它按顺序给出每个文件名,只要名称以
"file"
开头。你可以让它强制所有的东西,但是你会进入正则表达式,在这种情况下,正则表达式可能是多余的相关问题 更多 >
编程相关推荐