Python 2.7
我想用给定文件类型的操作系统(Win 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文档(嗯......我现在写了一行代码之后并没有真正期待任何东西,主要是希望和祈祷)。
所以我在编码()和XML文件中尝试了各种组合ISO 8859-1,UTF-8。一直试图阅读这些事情,但我仍然感到困惑。
请注意,这是我有史以来的第一个Python程序,我用Java编程了几年。但这里可能有些东西我不该做,所以请随意提出其他方法来实现我的目标。也就是说,在我的操作系统中设置为默认的任何应用程序中打开文件,然后返回到我的程序。没有引用新流程或类似的东西。只需打开文档然后继续。
答案 0 :(得分:2)
从你的错误:
cannot find the file specified: '\n\t\tC:\\Users...
注意\ n \ t \ t。看起来路径名前后的空格在从xml中拉出时会被保留。你应该把它剥掉。
os.startfile(doc.text.strip().encode('iso 8859-1'))
答案 1 :(得分: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'
正如您在此处所见,您的变量中有空格字符 - 您可以使用strip()删除这些字符。它们来自于您在节点内使用换行符和缩进的事实。
os.startfile(doc.text.strip())