Python:无法使用os.startfile启动文件

时间:2014-03-17 17:55:50

标签: python

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 &amp;     Statistics for Engineers &amp; 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编程了几年。但这里可能有些东西我不该做,所以请随意提出其他方法来实现我的目标。也就是说,在我的操作系统中设置为默认的任何应用程序中打开文件,然后返回到我的程序。没有引用新流程或类似的东西。只需打开文档然后继续。

2 个答案:

答案 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())