2012-05-14 73 views
0

所以我想通過是一個名爲eachjpgfile子文件夾內,並從doc文件更改爲mantaining文件的名稱的子文件夾eachjpgfile但我這樣做時,增加了文件的列表迭代將文件保存到eachjpgfile之前的目錄中,而不是保留它。看看下面的代碼,你能看出它爲什麼這樣做,我如何將它保存在eachjpgfile目錄中?重命名文件使用Python

下面是代碼:

for eachjpgfile in filelist: 
    os.chdir(eachjpgfile) 
    newdirectorypath = os.curdir 
    list_of_files = os.listdir(newdirectorypath) 
    for eachfile in list_of_files: 
     onlyfilename = os.path.splitext(eachfile)[0] 
     if onlyfilename == 'doc': 
      newjpgfilename = eachfile.replace(onlyfilename,eachjpgfile) 
      os.rename(eachfile, newjpgfilename) 
+2

'os.chdir(eachjpgfile)'什麼? –

+2

這有很多錯誤。 :) –

+4

如果您使用'os.walk'而不是重新創建這種特殊類型的輪子,這將更加清晰... – krlmlr

回答

1

有很多奇怪的東西在這裏發生,但我認爲這是造成您的特定問題的人使用'eachfile.replace'中的'eachjpgfile'。
從我所知道的,你傳入的'eachjpgfile'是一個完整路徑,所以你用'/ full/path/to/eachjpgfile'替換文件名中的'doc',這使得它並行到'eachjpgfile'目錄,而不管你當前的工作目錄。

你可以添加一行之前更換分割的路徑/文件名:

for eachjpgfile in filelist: 
    os.chdir(eachjpgfile) 
    newdirectorypath = os.curdir 
    list_of_files = os.listdir(newdirectorypath) 
    for eachfile in list_of_files: 
     onlyfilename = os.path.splitext(eachfile)[0] 
     if onlyfilename == 'doc': 
      root, pathName= os.path.split(eachjpgfile) #split out dir name 
      newjpgfilename = eachfile.replace(onlyfilename,pathName) 
      os.rename(eachfile, newjpgfilename) 

這是一個非常骯髒的腳本一個非常骯髒的修復。 :)

+0

工作,謝謝。是的,這是非常骯髒的,但它現在工作。我可能應該嘗試清理它,但非常初學者,我相信它顯示。 – wilbev

1

試試這個:

import os 

path = '.' 
recursive = False # do not descent into subdirs 

for root,dirs,files in os.walk(path) : 
    for name in files : 
     new_name = name.replace('aaa', 'bbb') 

     if name != new_name : 
      print name, "->", new_name 
      os.rename(os.path.join(root, name), 
        os.path.join(root, new_name)) 

    if not recursive : 
     break 
+0

感謝您的答案。使用os.walk是我相信在這裏更好的路線。我會考慮清理我的代碼。 – wilbev