我有一些代码可以在目录中找到最新的文件,并在文件名后附加时间戳。只要目录中有一个要重命名的文件,它就能很好地工作。如果我没有得到:
" ValueError:max()arg是一个空序列"
这是我的代码:
import os
import glob
import datetime
now = datetime.datetime.now()
append = now.strftime("%H%M%S")
newest = max(glob.iglob('1234_fileName*.LOG'), key=os.path.getmtime)
newfile = (append+"_"+newest)
os.rename(newest, newfile)
任何有关简化代码的建议都将受到赞赏,并解释如何仅在" 1234_fileName * .LOG" (注意通配符)文件被检测到。
我需要这个程序来定期运行(我可以使用任务调度程序)并检查新文件。如果有新文件,则将小时,分钟和秒添加到其名称中。
谢谢!
答案 0 :(得分:3)
您可以使用返回列表的glob.glob()
而不是返回迭代器的glob.iglob()
:
files = glob.glob('1234_fileName*.LOG')
if files:
newest = max(files, key=os.path.getmtime)
newfile = append + "_" + newest
os.rename(newest, newfile)
glob()
和iglob()
都使用了os.listdir()
,因此单个目录没有区别。
答案 1 :(得分:2)
max()抱怨你要求最大的0项,并抛出一个ValueError。你必须抓住它。这将继续抛出可能发生的任何IOErrors:
import os, glob, datetime
try:
app = datetime.datetime.now().strftime("%H%M%S")
newest = max(glob.iglob("1234_filename*.LOG"), key=os.path.getmtime)
newfile = (app + "_" + newest)
os.rename(newest, newfile)
except ValueError:
pass
答案 2 :(得分:1)
os.access
允许您在操作之前检查访问权限。一个例子就在链接下面。
此外,只需在try
except IOError
内进行操作即可。