2012-05-14 7 views
0

Так что я пытаюсь перебирать список файлов, которые находятся в подпапке eachjpgfile и изменить файл из doc в подпапку eachjpgfile mantaining имя файла, но когда я делаю это добавляет файл в каталог до 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

Существует много странных вещей происходит здесь, но я думаю, что тот, который вызывает ваш конкретный вопрос использует 'eachjpgfile' в 'eachfile.replace'.
Из того, что я могу сказать, «каждый файл», который вы проходите, является полным путем, поэтому вы заменяете «doc» в имени файла «/ full/path/to/eachjpgfile», что ставит его параллельно в директорию '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

Смежные вопросы