所以我想要做的是修復一些mp3文件的id3tags。除了有任何口音的文件之外,它都可以工作,因爲os.walk似乎將它們去掉了。os.walk()帶波蘭字符
例如,我有文件01.Co Słychać.mp3
,在該代碼:
for root, dirs, files in os.walk(folder):
print files
顯示爲['01.Co Slychac.mp3']
,後來導致「沒有這樣的文件或目錄」錯誤。
這怎麼解決?
所以我想要做的是修復一些mp3文件的id3tags。除了有任何口音的文件之外,它都可以工作,因爲os.walk似乎將它們去掉了。os.walk()帶波蘭字符
例如,我有文件01.Co Słychać.mp3
,在該代碼:
for root, dirs, files in os.walk(folder):
print files
顯示爲['01.Co Slychac.mp3']
,後來導致「沒有這樣的文件或目錄」錯誤。
這怎麼解決?
您是否將folder
定義爲Unicode字符串?這會影響os.walk()
如何匹配其子目錄,或者更好地說,它返回的字符串類型。
>>> for a,b,c in os.walk("."):
... print b
... break
...
['DLLs', 'Doc', 'include', 'Lib', 'libs', 'tcl', 'Tools']
>>> for a,b,c in os.walk(u"."):
... print b
... break
...
[u'DLLs', u'Doc', u'include', u'Lib', u'libs', u'tcl', u'Tools']
解決了我的問題。 – Robus
太好了。我想知道爲什麼[文檔](http://docs.python.org/library/os.html#os.walk)沒有提到這一點。 –
啊,我明白了。 'os.walk()'使用'os.listdir()'和[這裏](http://docs.python.org/library/os.html#os.listdir)文檔解釋了這種行爲:「在Windows NT/2k/XP和Unix,如果'path'是一個Unicode對象,結果將是一個Unicode對象列表。不可解碼的文件名仍然會作爲字符串對象返回。 –
哪個Python(版本號和來源),它是Unicode版本? –