我有以下脚本来处理非拉丁字符的文件名:
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发布于 2015-11-06 10:50:46
通过将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中,这只会在执行文件名转换时起作用。在Linux中,文件名可以是任何编码(或者根本不是!)。因此,确保创建文件的内容(avi + srt)使用的是UTF-8,终端设置为UTF-8,区域设置为UTF-8。
发布于 2015-11-06 10:40:54
您需要用正确的编码打开文件,以便在it.You中编写unicode,可以使用 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的适当编码。注意,您可以使用 statement打开文件,而不是打开文件并手动关闭它,这将在块结束时自动关闭文件。
https://stackoverflow.com/questions/33564812
复制相似问题