2017-03-18 58 views
0
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”。任何人有想法?用Python重命名文件似乎不起作用(os.rename)

+1

Windows不能有冒号':'在文件名中。 – Pit

回答

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正确的目录中,但不是在复杂的应用程序,因为建议这可能会破坏应用程序的其他部分。

你可能更喜欢另一种计算绝对路径&过滤器只在txt文件使用glob

import glob 

for fname in glob.glob(os.path.join("C:/SOURCE","*.txt")): 
    # now fname bears the absolute path 
+0

该死的看起来合乎逻辑,我要去看看。 – diatomym

+0

似乎工作,但路径格式似乎是用于Linux,因为它将//添加到不适用于Windows的路径。我如何解决这个问题? – diatomym

+0

路径格式在Windows上正常工作。你可以说得更详细点吗? –