在继续使用Python之前,如何检查文件是否存在

时间:2014-12-23 00:00:54

标签: python

我有一些代码可以在目录中找到最新的文件,并在文件名后附加时间戳。只要目录中有一个要重命名的文件,它就能很好地工作。如果我没有得到:

" 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" (注意通配符)文件被检测到。

我需要这个程序来定期运行(我可以使用任务调度程序)并检查新文件。如果有新文件,则将小时,分钟和秒添加到其名称中。

谢谢!

3 个答案:

答案 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内进行操作即可。

相关问题