2013-03-09 5 views
0
#Opens a directory and outputs a text file there that lists every subdirectory in it 

import os 
from shutil import move 

pathname = raw_input('Enter path for music directory (ex. C:\\Music): ') 
fn = raw_input('Enter desired file name for all converted files: ') 
ft = raw_input('Enter the file extension you want the program to look for (ex. .jpg): ') 
changepath = [] 
os.chdir(pathname) 
for path, subdirs, files in os.walk(pathname): 
     for name in files: 
      changepath.append(os.path.join(path, name)) 
for idx, val in enumerate(changepath): 
    if val.lower().endswith(ft): 
     os.rename(val, (fn + ft)) 
print('Complete') 

Я использую это, чтобы переименовать все обложки альбомов в моей папке с музыкой, что-то вроде new.jpg.«WindowsError 183» on os.rename()

Этот код не работает в строке 16 «os.rename (val, (fn + ft))» с ошибкой 183. Когда я использую «os.rename (val, val + (fn + ft))», он работает, но он вызывает файл что-то вроде old.jpgnew.jpg вместо new.jpg, что я и хочу.

Когда код сработает (написано так, как указано в блоке выше), я получаю файл new.jpg в музыкальном каталоге. Это переименованное обложка альбома первого подкаталога, но файлы обложки альбомов после первого переименованы. Он неудачно после успешного переименования первого изображения, но по какой-то причине переносит его из исходного каталога и в родительский каталог «Музыка».

ответ

4

Обновлено Ответ

Хорошо, я не видел ту часть, где был применен другой метод. Это:

os.rename(val, (fn + ft)) 

к:

os.rename(val, (os.path.dirname(val) + fn + ft)) 

, вероятно, что вы хотите

Старый Ответ

Ошибка 183 в Windows, является для already existent file. Глядя на ваш код немного:

fn = raw_input('Enter desired file name for all converted files: ') 
ft = raw_input('Enter the file extension you want the program to look for (ex. .jpg): ') 

Там нет очевидной информации пути вот так:

for idx, val in enumerate(changepath): 
    if val.lower().endswith(ft): 
     os.rename(val, (fn + ft)) 

Где путь для fn + ft? Основываясь на вашей логике, это просто закончилось тем, куда вы изначально были chdir'ed. Который при условии, что fn и ft представляются статическими значениями, поэтому вы бы получили файл уже существующий.

+0

Вот что я пытался исправить, говоря «os.rename (val, val + (fn + ft))». Проблема в том, что старое имя файла является частью val. – SciurusDoomus

+0

@SciurusDoomus Хорошо, я смотрел блок кода и ожидал, что это самый последний код. Обновленный ответ для вас. – cwgem

+0

К сожалению, я получаю ложный результат. Когда я смотрю на папки, файл, который я переименовал, просто имеет «folder.jpg», прикрепленный к имени файла. Файл также удаляется из исходного каталога в тот, который находится над ним. См. Здесь http://imgur.com/wvjovGW – SciurusDoomus