У меня нет поля Windows, чтобы попробовать это, но вы рассматривали возможность использования os.path.join
для создания путей?
basedir = os.path.join('C:/', 'Users', 'axeld', 'Desktop', 'Music', 'NG Trial')
old_name = os.path.join(basedir, item)
new_name = os.path.join(basedir, song_name)
os.rename(old_name, new_name)
Из документации os.path. join :
Интеллектуальное объединение одного или нескольких компонентов пути. Возвращаемое значение - это конкатенация пути и любых элементов * путей с ровно одним разделителем каталогов (os.sep), следующим за каждой непустой частью, кроме последней, что означает, что результат будет заканчиваться разделителем только в том случае, если последняя часть пуста , Если компонент является абсолютным путем, все предыдущие компоненты отбрасываются, и соединение продолжается с компонента абсолютного пути.
Вкл. Windows, буква диска не сбрасывается, когда компонент абсолютного пути (например, r ') \ foo ') встречается. Если компонент содержит букву диска, все предыдущие компоненты отбрасываются и буква диска сбрасывается. Обратите внимание, что поскольку для каждого диска имеется текущий каталог, os.path.join ("c:", "foo") представляет путь относительно текущего каталога на диске C: (* c: foo) , а не c: \ foo.
Обратите внимание на самую последнюю строку, которая документирует особый случай Windows (см. также этот ответ по SO : вот почему forward-sla sh после C:
в моем коде выше.
Альтернативное решение
Исходя из комментариев, решение os.path.join
будет по-прежнему вызывать ошибки. В качестве обходного пути вы можно использовать необработанные строки:
os.rename(
r'C:\Users\axeld\Desktop\Music\NG Trial\{}'.format(item),
r'C:\Users\axeld\Desktop\Music\NG Trial\{}'.format(song_name))