Python:Try/Except循环中文件名中的Minute off Time变量

2024-09-26 04:48:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用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方面还不够好,还不能实现这一点。我也不确定这是否是最好的解决方案——不管什么都可以

有人能帮我弄清楚吗


Tags: 文件path代码importtxt文件夹datetimedate
1条回答
网友
1楼 · 发布于 2024-09-26 04:48:33

所以,既然你的评论已经澄清,它将是一致的,总是最新的,你可以使用一些巧妙的小技巧

首先,os模块有一个名为os.listdir(path)的命令—这将为您提供给定目录(“/Users/Ryan”上面)中文件的文件名。由于开头是一致的,而且数字是按降序排列的,所以可以使用内置的sorted()对名称列表进行排序。这将对它们进行排序,以便最新的一个(最高的序号名称,因为数字是可预测的)将是最后一个。你可以list.pop()关闭最后一个,或者直接访问它(list[-1]),然后用它做你想做的事情(移动它等等)

如果你在同一个目录中有额外的和/或静态文件,你可能需要过滤从你的东西开始的东西-列表理解可以做到这一点

files_to_check = [name for name in sorted(os.listdir("/Users/...")) if name.startswith("file")]

它按顺序给出每个文件名,只要名称以"file"开头。你可以让它强制所有的东西,但是你会进入正则表达式,在这种情况下,正则表达式可能是多余的

相关问题 更多 >