相关文章推荐

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

3 人关注

我想重命名一个MP3文件。

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

But I get this error:

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 个评论
try to use / instead of \\
python
file
mp3
Maypher
Maypher
发布于 2020-02-24
1 个回答
Jir
Jir
发布于 2020-02-24
已采纳
0 人赞同

我没有一个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)

From the os.path.join的文档:

智能地连接一个或多个路径组件。返回值是path和*paths的任何成员的连接,除了最后一个部分,每个非空的部分后面都有一个目录分隔符(os.sep),也就是说,只有在最后一个部分为空的情况下,结果才会以分隔符结束。如果一个组件是绝对路径,那么之前的所有组件都会被扔掉,并从绝对路径组件继续连接。

在Windows上,当遇到一个绝对路径组件(例如r'\foo')时,硬盘号码不会被重置。如果一个组件包含一个盘符,那么之前的所有组件都会被扔掉,盘符会被重置。注意,由于每个驱动器都有一个当前目录,os.path.join("c:", "foo")代表一个相对于C:驱动器上的当前目录的路径(c:foo),而不是c:\foo。

注意最后一行,它记录了在Windows上的一个特殊情况(也可参见这个关于SO的回答:这就是为什么我上面的代码中C:后面有正斜杠。

Alternative solution

根据评论,os.path.join的解决方案仍然会产生错误。

 
推荐文章