使用unicode文件名的Python复制文件

2024-10-01 13:45:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图创建一个小脚本来复制变量中部分unicode名称的文件,但我无法使其工作。在

代码如下:

    fileextension = filename.split(".")[len(filename.split(".")) - 1]
    if not os.path.exists(artistdir + "\\" + songname + "." + fileextension):
        print basedir + filename, artistdir + "\\" + songname + "." + fileextension
        shutil.copy(basedir + filename, artistdir + "\\" + songname + "." + fileextension)

我得到以下回报:

^{pr2}$

第一行显示复制失败的文件的目标和源路径(返回print语句)。在

提前谢谢。在


Tags: 文件代码名称lenifunicodenotfilename
2条回答

您应该将Unicode字符串传递给shutil.copy()。不要混合使用bytestrings和Unicode字符串。在

所有变量(filenameartistdirsongnamefileextensionbasedir)在这里应该是Unicode字符串(assert isinstance(s, unicode))。在

在不同的地方散布.decode('utf-8')代码很容易出错。请改用Unicode sandwich

  1. 尽快将输入bytestring转换为Unicode文本
  2. 在内部使用Unicode处理文本
  3. 输出时尽可能晚地将Unicode文本转换为字节(如果有必要)

尝试将其更改为:

fileextension = filename.split(".")[len(filename.split(".")) - 1]
if not os.path.exists(artistdir + "\\" + songname + "." + fileextension):
    print basedir + filename, artistdir + "\\" + songname + "." + fileextension
    shutil.copy(basedir + filename.decode('utf8'), artistdir + "\\" + songname.decode('utf8') + "." + fileextension)

注意它的“decode”而不是“encode”(您可能已经尝试过encode,但对已经使用utf8的字符串进行编码是没有意义的)

相关问题 更多 >