Python:从脚本中打开一个名为 xls 的 unicode 文件
Posted
技术标签:
【中文标题】Python:从脚本中打开一个名为 xls 的 unicode 文件【英文标题】:Python: Opening a unicode named xls file from the script 【发布时间】:2011-07-28 05:01:20 【问题描述】:如何在 Windows 下的 Python 脚本中打开 unicode 命名文件(带有 空格) ?
文件名例如:Hello עולם.xls
对于非 unicode 无间距 xls 文件,os.system(filename)
效果很好。
对于非 unicode 间隔的 xls 文件,os.system('"'+filename+'"')
效果很好。
但是对于 unicode 空间 xls 文件...
os.system(filename)
和 subprocess.call(new_filename)
都给:
UnicodeEncodeError: 'ascii' 编解码器 无法在位置编码字符 12-13:序数不在范围内(128)
os.system(new_filename.encode('UTF-8'))
给出:
'Hello' 未被识别为 内部或外部命令,可操作 程序或批处理文件。
subprocess.call(new_filename.encode('UTF-8'))
给出:
WindowsError: [错误 2] 系统找不到指定的文件
【问题讨论】:
【参考方案1】:os.startfile()
如 Bradley (+1) 所述,但请确保传入 Unicode 字符串,而不是字节字符串。
Windows NT 文件名本身是 Unicode,Windows 上的 Python(与大多数其他脚本语言不同)内置特定支持,用于将 Unicode 字符串传递到需要文件名的 API:
os.startfile(u'Hello \u05e2\u05d5\u05dc\u05dd.xls') # u'Hello עולם.xls'
如果您传入一个字节字符串,它将转到标准 C stdio
库,该库在 Microsoft C 运行时将使用机器的默认字符集(也称为 ANSI 代码页)将字节字符串映射到 Unicode 文件名,这是getfilesystemencoding()
返回的内容。如果文件名中的每个字符都可以在 ANSI 代码页中表示,这仍然可以工作,但示例文件名将失败,除了 Windows 的希伯来语安装。
很遗憾,system()
或 subprocess
不支持相同的 Unicode。但在这种情况下,您可能不需要使用命令行。
【讨论】:
您对这个主题的了解令人印象深刻。【参考方案2】:您应该使用os.startfile()
,而不是os.system()
。您可能还想使用sys.getfilesystemencoding()
,例如
import os
import sys
os.startfile(filename.encode(sys.getfilesystemencoding()))
【讨论】:
以上是关于Python:从脚本中打开一个名为 xls 的 unicode 文件的主要内容,如果未能解决你的问题,请参考以下文章
python用xlwt向xls中写入中文,显示乱码该怎么解决
python 用于生成车库的唯一编号的脚本,用于文本广告系列。一个脚本用于创建XLS文件,另一个脚本用于单独创建