Python:无法用os.startfile启动文件
Python 2.7
我想用我电脑上默认的应用程序打开一个文件,操作系统是Windows 7。我正在使用的方法是os.startfile。
问题出在字符编码上,我花了好几个小时,但还是没找到解决办法。
# -*- coding: utf-8 -*-
import xml.etree.cElementTree as etree
import os
class Session:
'Session'
def __init__(self, xmlfile):
parser = etree.XMLParser(encoding="utf-8")
self.tree = etree.parse(xmlfile, parser=parser)
self.root = self.tree.getroot()
def get_documents(self):
return self.root.findall('document')
session = Session('sessionutf8.xml')
for doc in session.get_documents():
print doc.text.encode('utf-8')
os.startfile(doc.text.encode('iso 8859-1'))
输入的XML文件:
<?xml version="1.0" encoding="utf-8"?>
<session>
<name> Statistikk </name>
<document>
C:\Users\Jens\Documents\Vår 2014\TMA4245 Statistikk\Probability & Statistics for Engineers & Scientists (9th Edition) - Walpole.pdf
</document>
输出结果:
%USERPROFILE%\Documents\My Python scripts\> python session.py
C:\Users\Jens\Documents\Vår 2014\TMA4245 Statistikk\Probability & Statistics for Engineers & Scientists (9th Edition) - Walpole.pdf
Traceback (most recent call last):
File "session.py", line 19, in <module>
os.startfile(doc.text.encode('iso 8859-1'))
WindowsError: [Error 2] The system cannot find the file specified: '\n\t\tC:\\Users\\Jens\\Documents\\V\xe5r 2014\\TMA4245 Statistikk\\Probability & Statistics for Engineers & Scientists (9th Edition) - Walpole.pdf\n\t'
Process python exited with code 1
我可以在控制台上正确显示包含字符'å'的文件名,但无法以Windows接受的方式传递它。
更让人困惑的是,下面的代码可以正常工作:
book = u'C:\\Users\Jens\Documents\Vår 2014\TMA4245 Statistikk\Probability & Statistics for Engineers & Scientists (9th Edition) - Walpole.pdf'
os.startfile(book.encode('iso 8859-1'))
这段代码可以按预期在Adobe Reader中打开PDF文档(嗯……现在写完一行代码后,我其实也不太期待什么,更多的是希望和祈祷)。
所以我尝试了各种组合,比如ISO 8859-1、UTF-8的编码和XML文件。我一直在研究这些东西,但还是搞不清楚。
需要注意的是,这是我写的第一个Python程序,我之前在Java上编程了几年。但这里可能有我不该做的事情,所以欢迎你提出其他实现我目标的方法。我的目标是打开一个文件,用操作系统中设置的默认应用程序,然后再返回到我的程序中。不需要涉及新进程之类的,只要打开文档,然后继续就行。
2 个回答
0
WindowsError: [Error 2] The system cannot find the file specified: '\n\t\tC:\\Users\\Jens\\Documents\\V\xe5r 2014\\TMA4245 Statistikk\\Probability & Statistics for Engineers & Scientists (9th Edition) - Walpole.pdf\n\t'
os.startfile(doc.text.strip())
你可以看到,你的变量里有多余的空格和换行符——你可以用 strip() 方法把它们去掉。这些多余的空白是因为你在节点里用了换行和缩进。
2
根据你的错误信息:
cannot find the file specified: '\n\t\tC:\\Users...
注意到有 \n\t\t。这表示在从xml文件中提取路径名称时,前面和后面的空格被保留了。你应该把这些空格去掉。
os.startfile(doc.text.strip().encode('iso 8859-1'))