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从网上下载一个excel文件

python 用于生成车库的唯一编号的脚本,用于文本广告系列。一个脚本用于创建XLS文件,另一个脚本用于单独创建

excel提示 打开的文件.xls的格式与文件扩展名不一致怎么办

用VBA代码打开其他excel工作簿(有打开密码的)???

为啥07的Excel能打开xls 却打不开xlsx的文件。