python将文件名更改为unicode chars印地语

时间:2015-03-14 09:42:37

标签: python unicode

我正在尝试将文件名更改为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

如何更改文件名?

1 个答案:

答案 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过滤掉匹配的文件名。