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

2 投票
2 回答
3002 浏览
提问于 2025-04-17 22:42

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 &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文档(嗯……现在写完一行代码后,我其实也不太期待什么,更多的是希望和祈祷)。

所以我尝试了各种组合,比如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'))

撰写回答