Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
970 views
in Technique[技术] by (71.8m points)

windows - How to open a file in its default program with python

I want to open a file in python 3.5 in its default application, specifically 'screen.txt' in Notepad.

I have searched the internet, and found os.startfile(path) on most of the answers. I tried that with the file's path os.startfile(C:[directories n stuff]screen.txt) but it returned an error saying 'unexpected character after line continuation character'. I tried it without the file's path, just the file's name but it still didn't work.

What does this error mean? I have never seen it before.

Please provide a solution for opening a .txt file that works.

EDIT: I am on Windows 7 on a restricted (school) computer.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

It's hard to be certain from your question as it stands, but I bet your problem is backslashes.

[EDITED to add:] Or actually maybe it's something simpler. Did you put quotes around your pathname at all? If not, that will certainly not work -- but once you do, you will find that then you need the rest of what I've written below.

In a Windows filesystem, the backslash is the standard way to separate directories.

In a Python string literal, the backslash is used for putting things into the string that would otherwise be difficult to enter. For instance, if you are writing a single-quoted string and you want a single quote in it, you can do this: 'don't'. Or if you want a newline character, you can do this: 'First line. Second line.'

So if you take a Windows pathname and plug it into Python like this:

os.startfile('C:fooaraz')

then the string actually passed to os.startfile will not contain those backslashes; it will contain a form-feed character (from the f) and two backspace characters (from the s), which is not what you want at all.

You can deal with this in three ways.

  • You can use forward slashes instead of backslashes. Although Windows prefers backslashes in its user interface, forward slashes work too, and they don't have special meaning in Python string literals.

  • You can "escape" the backslashes: two backslashes in a row mean an actual backslash. os.startfile('C:\foo\bar\baz')

  • You can use a "raw string literal". Put an r before the opening single or double quotes. This will make backslashes not get interpreted specially. os.startfile(r'C:fooaraz')

The last is maybe the nicest, except for one annoying quirk: backslash-quote is still special in a raw string literal so that you can still say 'don't', which means you can't end a raw string literal with a backslash.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...