首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使这个python(2.7)脚本与unicode文件名一起工作?

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

Stack Overflow用户
提问于 2015-11-06 10:34:54
回答 2查看 562关注 0票数 0

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

代码语言:javascript
复制
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()

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

代码语言:javascript
复制
new 1.py
ああっ女神さまっ 小っちゃいって事は便利だねっ.1998.Ep0108.x264.AC3CalChi.avi
ああっ女神さまっ 小っちゃいって事は便利だねっ.1998.Ep0108.x264.AC3CalChi.srt

以_filelist.txt表示的输出:

代码语言:javascript
复制
new 1.py
???????? ??????????????.1998.Ep01-08.x264.AC3-CalChi.avi
???????? ??????????????.1998.Ep01-08.x264.AC3-CalChi.srt
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-06 10:50:46

通过将Unicode文件路径传递给listdir,您应该获得作为Unicode字符串的文件列表。在使用getcwd时,请使用:os.getcwdu()

然后使用文本编码包装打开输出文件。io模块是这样做的新方法(io正确地处理通用换行符)。

把这一切结合在一起:

代码语言:javascript
复制
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。

票数 2
EN

Stack Overflow用户

发布于 2015-11-06 10:40:54

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

代码语言:javascript
复制
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打开文件,而不是打开文件并手动关闭它,这将在块结束时自动关闭文件。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33564812

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档