OSError: [WinError 123] Неверный синтаксис имени файла, имени каталога или метки тома: [Python] - PullRequest
1 голос
/ 24 февраля 2020

Я хочу переименовать файл mp3.

   os.rename(f'C:\\Users\\axeld\\Desktop\\Music\\NG  Trial\\{item}',
             f'C:\\Users\\axeld\\Desktop\\Music\\NG  Trial\\{Song_name}')

Но я получаю эту ошибку:

OSError: [WinError 123] The filename, directory name, or volume label syntax is incorrect: 'C:\\Users\\axeld\\Desktop\\Music\\NG  Trial\\109650.mp3' -> 'C:\\Users\\axeld\\Desktop\\Music\\NG  Trial\\Operation: Evolution.mp3'

Я на 100% уверен, что файл есть, так почему Я получаю эту ошибку?

1 Ответ

0 голосов
/ 24 февраля 2020

У меня нет поля 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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...