如何使这个 python(2.7) 脚本与 unicode 文件名一起工作?

How to make this python(2.7) scripts works with unicode filename?

我有以下脚本来处理带有非拉丁字符的文件名:

import os
filelst = []
allfile = os.listdir(os.getcwd())
for file in allfile:
        if os.path.isfile(file):
            filelst.append(file)

w = open(os.getcwd()+'\_filelist.txt','w+')

for file in allfile:
    w.write(file)
    w.write("\n")
w.close()

我的文件夹中的文件列表:

new 1.py
ああっ女神さまっ 小っちゃいって事は便利だねっ.1998.Ep0108.x264.AC3CalChi.avi
ああっ女神さまっ 小っちゃいって事は便利だねっ.1998.Ep0108.x264.AC3CalChi.srt

在_filelist.txt中的输出:

new 1.py
???????? ??????????????.1998.Ep01-08.x264.AC3-CalChi.avi
???????? ??????????????.1998.Ep01-08.x264.AC3-CalChi.srt

您需要使用正确的编码打开文件才能在 it.You 中写入 unicode 可以使用 codecs module 打开文件:

import codecs
with codecs.open(os.getcwd()+'\_filelist.txt','w+',encoding='your-encoding') as w:
    for file in allfile:
        w.write(file + '\n')

您可以使用 UTF-8 作为您的编码,它是一种通用编码或其他基于您的 unicode 的适当编码 type.Also 请注意,您可以使用 with statement 打开文件,在块结束时自动关闭文件。

您应该通过将 Unicode 文件路径传递给 listdir 来获取 Unicode 字符串形式的文件列表。当您使用 getcwd 时,请使用:os.getcwdu()

然后使用文本编码包装器打开输出文件。 io 模块是执行此操作的新方法(io 正确处理通用换行符)。

综合起来:

import os
import io

filelst = []
allfile = os.listdir(os.getcwdu())
for file in allfile:
        if os.path.isfile(file):
            filelst.append(file)

w = io.open(os.getcwd()+'\_filelist.txt','w+', encoding="utf-8")

for file in allfile:
    w.write(file)
    w.write("\n")
w.close()

在 Windows 和 OS X 中,这只会在强制执行文件名转换时起作用。在 Linux 中,文件名可以是任何编码(或根本不是!)。因此,请确保创建文件 (avi + srt) 的任何内容都使用 UTF-8,您的终端设置为 UTF-8,并且您的语言环境为 UTF-8。