我想重命名一个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)


documentation of os.path.join


  智能地连接一个或多个路径组件。返回值是路径和* path的任何成员的连接,每个非空部分之后都带有一个单独的目录分隔符(os.sep),除了最后一部分,这意味着如果最后一部分为空,结果将仅以分隔符结尾。如果组件是绝对路径,则所有先前的组件都将被丢弃,并且连接将从绝对路径组件继续。
  
  在Windows上,遇到绝对路径成分(例如r'\ foo')时,不会重置驱动器号。如果某个组件包含驱动器号,则会丢弃所有先前的组件,并重置驱动器号。请注意,由于每个驱动器都有一个当前目录,所以os.path.join(“ c:”,“ foo”)表示相对于驱动器C:(c:foo)上当前目录的路径,而不是c:\ foo 。


请注意最后一行,它记录了Windows上的一种特殊情况(另请参见answer on SO:这就是为什么在我上面的代码中,在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))

关于python - OSError:[WinError 123]文件名,目录名称或卷标签语法不正确:[Python],我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60369372/

10-11 22:53
查看更多