我有以下脚本来处理带有非拉丁字符的文件名:
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
答案 0 :(得分:2)
您应该通过将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。
答案 1 :(得分:1)
您需要使用正确的编码打开文件以在其中编写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类型的其他正确编码。另请注意,您可以使用with
statement来打开文件并手动关闭它。打开文件,该文件将在块结束时自动关闭文件。