import time, os
timestamp = time.strftime('%d.%m_%H:%M')
while True:
print("Beginning checkup")
print("=================")
for fname in os.listdir("C:/SOURCE"):
if fname.endswith(".txt"):
print("found " + fname)
os.rename(fname, fname.replace(fname, timestamp + ".txt"))
time.sleep(5)
这是我的代码。它应该做的是在SOURCE中查找.txt文件并为名称添加时间戳。这不知何故给了我一个“FileNotFoundError”。有人有想法吗?
答案 0 :(得分:1)
几个问题
os.listdir
返回文件名,不带路径。:
,您不能将其用作文件名因此,在重命名时,您必须使用os.path.join
提供os.rename()
的完整路径
下一个问题是您添加时间戳的替换是错误。它没有添加时间戳,但完全替换了文件名。
fname.replace(fname, timestamp + ".txt"))
严格等同于
timestamp + ".txt"
另一个小问题是,如果文件以.TXT
结尾,则过滤器无法检测到该文件。最好将fnmatch
模块用于复杂的通配符。在您的情况下,我刚刚应用了lower()
。
我的完整修正提案,它在目录的所有txt文件中插入时间戳:
timestamp = time.strftime('%d_%m_%H_%M') # only underscores: no naming issues
the_dir = "C:/SOURCE"
for fname in os.listdir(the_dir):
if fname.lower().endswith(".txt"):
print("found " + fname)
new_name = "{}_{}.txt".format(os.path.splitext(fname)[0],timestamp)
os.rename(os.path.join(the_dir,fname), os.path.join(the_dir,new_name))
当然您也可以os.chdir
到正确的目录,但在复杂的应用程序中不建议这样做,因为这可能会破坏应用程序的其他部分。
您可能更喜欢计算绝对路径的替代方案。仅使用glob
import glob
for fname in glob.glob(os.path.join("C:/SOURCE","*.txt")):
# now fname bears the absolute path