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

python change file names to unicode chars Hindi

我正在尝试将文件名更改为我从逐行读取的文件中获取的 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

如何更改文件的名称?

您忘记从行尾删除 换行符。使用 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 过滤掉匹配的文件名。