OSError:[WinError 123]文件名、目录名或卷标语法不正确:[Python]



我想重命名一个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%确信文件在那里,那么为什么我会出现这个错误呢?

我没有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上的答案:这就是为什么在我上面的代码中C:后面有正斜杠的原因。

替代解决方案

根据这些评论,os.path.join解决方案仍然会出现错误。作为一种变通方法,您可以使用原始字符串:

os.rename(
r'C:UsersaxeldDesktopMusicNG Trial{}'.format(item), 
r'C:UsersaxeldDesktopMusicNG Trial{}'.format(song_name))

最新更新