Python - ファイルを関連付けされたアプリで開く

エクスプローラーでファイルをダブルクリックした時のように、ファイルを既定のアプリケーションで開くには os.startfile 関数を使用します。

制限事項

os.startfile 関数 が使用できるのは Windows のみです。

Linux や macOS では エラー「AttributeError: module 'os' has no attribute 'startfile'」が発生します。

ファイルを関連付けされたアプリで開く方法

import os

os.startfile(ファイルパス)

ファイルを 印刷 や 編集 で開く

引数 operation に 'print' を指定すると 印刷モード、'edit' を指定すると 編集モード でアプリケーションが起動します。これはエクスプローラーでファイルを右クリックしたときに表示される「印刷(P)」「編集(E)」と同等です。operation 引数を省略すると 'open' となり、「開く(O)」の動作になります。
import os

# 開く
os.startfile(ファイルパス)
os.startfile(ファイルパス, operation='open')

# 印刷
os.startfile(ファイルパス, operation='print')

# 編集
os.startfile(ファイルパス, operation='edit')
ファイルを右クリックした状態
ファイルを右クリックした状態

フォルダを開く

パスにフォルダを指定すると、指定したフォルダがエクスプローラーで開きます。
import os

# フォルダを開く。既に開いていれば最前面にする。
os.startfile(フォルダパス)
os.startfile(フォルダパス, operation='open')

# フォルダを新しい画面で開く
os.startfile(フォルダパス, operation='explore')

# フォルダを検索モードで開く
os.startfile(フォルダパス, operation='find')
検索モードで開いた状態
検索モードで開いた状態

パスを指定するときの注意

相対パスで指定するとき、パス区切り文字に「/(スラッシュ)」を使用すると動作しません。
# 相対パスで / は NG
# FileNotFoundError: [WinError 2] 指定されたファイルが見つかりません。
os.startfile(r'./dir/test.txt')

# 絶対パスで / は OK
os.startfile(r'D:/dir/test.txt')

対処方法1 パスを正規化

os.startfile 関数 でパスを正規化します。正規化すると、Windows では、スラッシュがバックスラッシュに変換されます。

# パスを正規化
os.startfile(os.path.normpath(r'./dir/test.txt'))

対処方法2 絶対パスに変換

os.path.abspath 関数を使用し、相対パスを絶対パスに変換します。abspath 関数を使用すると正規化も行われます。

# 相対パスを絶対パスに変換
os.startfile(os.path.abspath(r'./dir/test.txt'))

検証環境