簡體   English   中英

OSError:[WinError 123] 文件名、目錄名或卷 label 語法不正確:[Python]

[英]OSError: [WinError 123] The filename, directory name, or volume label syntax is incorrect: [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 的文檔

智能地加入一個或多個路徑組件。 返回值是 path 和 *paths 的任何成員的串聯,每個非空部分(最后一部分除外)后面只有一個目錄分隔符(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:\Users\axeld\Desktop\Music\NG Trial\{}'.format(item), 
    r'C:\Users\axeld\Desktop\Music\NG Trial\{}'.format(song_name))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM