2015-02-08 66 views
-1

我正在制作一个程序,让我'后缀'(我称之为)文本到很多目录中的文件。该代码有效,即使它可能不是100%有效。Python - os模块的帮助? - (os.rename等)

问题是,我现在正在尝试制作一个'前缀',它将接近“后缀”的相反位置,并将文本添加到目录中名称文件的前面。

这是我的“suffixer”代码:

suffixer = str(input("Please Enter Your Suffixer: ")) 

for root, dirs, filenames in os.walk(folder): 
    for filename in filenames: 
     fullpath = os.path.join(root,filename) 
     pathname = re.findall(r"(.*?)"+suffixer,str(fullpath)) 

     if(len(pathname) >= 1): 
      pass 
     else: 
      filename_split = os.path.splitext(fullpath) # filename and extensionname (extension in [1]) 
      filename_zero, fileext = filename_split 

      try: 
       os.rename(fullpath, filename_zero + "_" + suffixer + fileext) 
      except Exception as e: 
       print("Error!",str(e),"\n") 
       time.sleep(0.5) 
       Main() 

      print("\nSuffixed!\n") 
      time.sleep(0.5) 

我怎么会做同样的,但添加到开始?我试过了:

os.rename(fullpath, prefixer + "_" + filename_zero + fileext) 

但是这不起作用,有什么想法? 这不起作用,因为filename_zero是完整的路径名。例如C:\东西\文件名,而不仅仅是文件名

编辑:我想保持类似的suffixer的prefixier,感谢

+3

没有工作怎么样? – NPE 2015-02-08 19:44:23

回答

0

我不知道为什么这是一个秘密是什么“不工作”确切的意思。但我想,根据操作系统,您的fullpath/home/username/...或者C:\whatever\开始。

您可以使用print (filename_zero + "_" + suffixer + fileext)进行验证。

这是一个问题,因为...前缀/home/glglgl/myfileprefix-不会导致/home/glglgl/prefix-myfile,但在prefix-/home/glglgl/myfile。这很可能不是我真正想要的。

fullpath = os.path.join(root, filename) # as before 
full_old_path = fullpath 
full_new_path = os.path.join(root, prefix + "_" + filename) 
os.rename(full_old_path, full_new_path) 

顺便说一句,“前缀”将是这样的程序的术语;文件的基本名称前面的文本宁可是“前缀”而不是“前缀”。

如果你想这一切是通用的,你可以做

def filename_changer(folder, changer) 
    for root, dirs, filenames in os.walk(folder): 
     for filename in filenames: 
      changer(root, filename) 

def suffixer(suffix, root, filename): 
    fullpath = os.path.join(root, filename) 
    filename_zero, fileext = os.path.splitext(fullpath) # filename and extension 
    if not filename_zero.endswith(suffix): 
     os.rename(fullpath, filename_zero + "_" + suffix + fileext) 
     print("\nSuffixed!\n") 
     time.sleep(0.5) 

def prefixer(prefix, root, filename): 
    if not filename.startswith(prefix): 
     full_old_path = os.path.join(root, filename) 
     full_new_path = os.path.join(root, prefix + "_" + filename) 
     os.rename(full_old_path, full_new_path) 
     print("\nPrefixed!\n") 
     time.sleep(0.5) 

使用这些功能,你可以做

try: 
    suffix = input("Please enter your suffix: ") 
    filename_changer(folder, lambda root, filename: suffixer(suffix, root, filename)) 
except Exception as e: 
    print("Error!",str(e),"\n") 
    time.sleep(0.5) 

try: 
    prefix = input("Please enter your prefix: ") 
    filename_changer(folder, lambda root, filename: prefixer(prefix, root, filename)) 
except Exception as e: 
    print("Error!",str(e),"\n") 
    time.sleep(0.5) 

一些言论:

  • 您捕捉异常的方式和再次致电Main()是非常糟糕的风格。这样,经过1024次左右的错误后,你将会发生堆栈溢出。
  • 如果我们处于特殊的详细模式,则您的“前缀”和“后缀”输出应该更好地被抑制 - 或者完成。该sleep(0.5)通话,可恼人的,以及...
  • 你可以通过改变

    filename_changer(folder, lambda root, filename: prefixer(prefix, root, filename)) 
    

    优化我的代码有点

    filename_changer(folder, functools.partial(prefixer, prefix))