2015-10-06 144 views
1

我成功地创建了一个脚本,它将目录中的所有$都更改为#,但它不影响文件夹名称。所以文件夹名仍然保持相同的名称。我如何修改这个以更改文件夹名称中的$到#以及?在Python中重命名文件夹

def cleanFiles(self): 
    directoryChosen = self.directoryChoice() 
    print directoryChosen + "  you made it to files selected" 

    #for file_names in os.listdir(directoryChosen): 
     #self.listWidget.addItem(file_names) 

    for n in os.listdir(directoryChosen): 
     print n + " made it here" 
     self.listWidget.addItem(n) 
     if os.path.isdir(directoryChosen): 

      print directoryChosen + " almost there" 
      newname = n.replace('$', '#') 
      print newname + " this is newname" 
      if newname != n: 
       print newname 
       print n 
       path = os.path.join(directoryChosen + '/' + n) 
       print path 
       target = os.path.join(directoryChosen + '/' + newname) 
       print target 
       os.rename(path, target) 

回答

1

你的第一个问题是,你正在做这件事:

if os.path.isdir(directoryChosen):

当你想这样做:所以

if os.path.isdir(n):

,与记住,在你的循环内你实际上想要引用n,这是您正在尝试检查的文件夹和文件。

第二个问题是您的使用os.path.join

您不必加入您加入的方式。您不需要在两者之间添加斜线,联接就可以为您做到这一点。我建议阅读文档。所以,你要这样:

path = os.path.join(directoryChosen, n) 
target = os.path.join(directoryChosen, newname) 

因此,该代码然后将最终看起来是这样的:

for n in os.listdir(directoryChosen): 
    print n + " made it here" 
    self.listWidget.addItem(n) 
    if os.path.isdir(n): 

     print directoryChosen + " almost there" 
     newname = n.replace('$', '#') 
     print newname + " this is newname" 
     if newname != n: 
      print newname 
      print n 
      path = os.path.join(directoryChosen, n) 
      print path 
      target = os.path.join(directoryChosen, newname) 
      print target 
      os.rename(path, target) 
+0

UnboundLocalError:在赋值之前引用的局部变量'n' – Anekdotin

+0

@Eddwinn好抓! :)这是一个编辑失败。再试一次。 – idjaw

+0

在会议上展示这一点。稍后更新 – Anekdotin

1
if os.path.isdir(directoryChosen): 
    for n in os.listdir(directoryChosen): 
     self.listWidget.addItem(n) 
     newname = n.replace('$', '#') 
     if newname != n: 
      path = os.path.join(directoryChosen, n) 
      target = os.path.join(directoryChosen, newname) 
      os.rename(path, target) 

    newdir = directoryChosen.replace('$', '#') 
    if directoryChosen != newdir 
     os.rename(directoryChosen, newdir) 
+0

Ahh之前试过你的方法,它只会改变选择的内容,所以我不得不选择文件夹名称,然后再次选择并选择内部文件夹。 – Anekdotin

+0

尝试这个新的编辑 – Anekdotin

+0

什么是一件精致的事情,你的第一种方法工作,然后没有。这给我带来麻烦 – Anekdotin

1

我不知道如果我正确地理解您的问题。但是,您可以使用下面的代码:

import os 

def cleanFiles(): 
    directoryChosen = "C:\\Test$234" 
    if os.path.isdir(directoryChosen): 
     for n in os.listdir(directoryChosen): 
      newname = n.replace('$', '#') 
      if newname != n: 
       path = os.path.join(directoryChosen + '/' + n) 
       target = os.path.join(directoryChosen + '/' + newname) 
       os.rename(path, target) 

    os.rename(directoryChosen, directoryChosen.replace('$','#')) 

它重命名您选择的目录以及,如果这是您正在寻找。