如何使这个 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。
我有以下脚本来处理带有非拉丁字符的文件名:
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。