我正在尝试将文件名更改为unicode,这是我从逐行读取的文件中获取的。当我尝试重命名文件时,我在这里得到错误。这是代码
import codecs
import os
arrayname = []
arrayfile = []
f = codecs.open('E:\\songs.txt', encoding='utf-8', mode='r+')
for line in f:
arrayname.append(line)
for filename in os.listdir("F:\\songs"):
if filename.endswith(".mp3"):
arrayfile.append(filename)
for num in range(0,len(arrayname)):
print "F:\\songs\\" + arrayfile[num]
os.rename("F:\\songs\\" + arrayfile[num], "F:\\songs\\" + (arrayname[num]))
我收到此错误
Traceback (most recent call last):
File "C:\read.py", line 25, in <module>
os.rename("F:\\songs\\" + arrayfile[num], "F:\\songs\\" + (arrayname[num]))
WindowsError: [Error 123] The filename, directory name, or volume label syntax is in
correct
如何更改文件名?
答案 0 :(得分:1)
您忘记从行尾删除换行符。使用str.rstrip()
删除它:
for line in f:
arrayname.append(line.rstrip('\n'))
您可以稍微简化代码,并使用最佳实践来确保文件已关闭。我会使用较新的(并且设计得更好)io.open()
而不是codecs.open()
。如果对路径使用Unicode文字,Python将确保在列出时获得Unicode文件名:
import io
import os
import glob
directory = u"F:\\songs"
songs = glob.glob(os.path.join(directory, u"*.mp3"))
with io.open('E:\\songs.txt', encoding='utf-8') as newnames:
for old, new in zip(songs, newnames):
oldpath = os.path.join(directory, old)
newpath = os.path.join(directory, new.rstrip('\n'))
print oldpath
os.rename(oldpath, newpath)
我使用glob
module过滤掉匹配的文件名。