Open explorer on a file
Asked Answered
T

11

105

In Python, how do I jump to a file in the Windows Explorer? I found a solution for jumping to folders:

import subprocess
subprocess.Popen('explorer "C:\path\of\folder"')

but I have no solution for files.

Tho answered 11/11, 2008 at 19:24 Comment(0)
R
124

From Geoff Chappell's The Windows Explorer Command Line

import subprocess
subprocess.Popen(r'explorer /select,"C:\path\of\folder\file"')
Rarotonga answered 11/11, 2008 at 19:33 Comment(14)
I'm aware that this is a super old post but it's worth a shot. I have a module that connects a sharepoint document library to a Windows Explorer window so that a copy past locally will upload to the sharepoint doc library. This occasionally needs to be refreshed and I'm using selenium to reconnect but now I've got an open Windows Explorer window. I'm clueless how to close that window so that the application GUI becomes the focus for the end user again. Any idea how to select that window and close it?Delwyn
haha, I was reading the comma as a string adder, i was like WTF is going on. It's part of the string.Gondar
For some odd reason, on my windows 10 system, this just opens up the explorer user libraries with 'My Documents' in focus.Nunciata
subprocess.Popen(r'explorer /select,"C:\path\of\folder\file"') works, but how do I get this window on top of other windows, if the user goes to some other window after having executed this statement somewhere in his program?Gershon
@Nik It's like a year late, but I think the reason that happens is because your filepath isn't pointing to a specific file. It seems you can't just point to a directory.Strop
A working link (as of now) to command-line options: geoffchappell.com/studies/windows/shell/explorer/cmdline.htmIntentional
Using this method will give me a return code of 1 even though the explorer window opens correctly and selects the file. Does anyone know why this is, maybe worth a question in its self? (I get a return code of 1 if I use the string command with os.system, subprocess.call, or subprocess.Popen and ask for the return code.)Hairbrush
I'm having the same issue as @MisterGeeky, it just opens "My Documents". I'm pretty sure it has something to do with the backslashes...Castle
I forgot to add the comma (,) between /select and the path then the My Documents is opened. i.e. explorer /select,"C:\path\of\folder\file" is correct not this explorer /select "C:\path\of\folder\file"Gilkey
A good resource for explorer CMD options: ss64.com/nt/explorer.htmlTerrarium
if you're using forward slashes in the filepath then do a filepath.replace('/', '\\') so that it's like C:\path\of\folder\fileAmora
What's the comma after select for?Servile
If you're converting slashes like @PaulSumpner suggests, remember to use a raw string so you don't get double slashes (which is extremely annoying that that isn't automatically handled...)Miley
Saw that if you want to combine f and r strings for performing this its doable to do subprocess.Popen(fr'explorer /select,"{my_var}"')Hepatica
V
39

A nicer and safer solution (only in Windows unfortunately) is os.startfile().

When it's given a folder instead of a file, it will open Explorer.

Im aware that i do not completely answer the question since its not selecting a file, but using subprocess is always kind of a bad idea (for security reasons) and this solution may help other people.

Varicotomy answered 7/3, 2018 at 19:40 Comment(6)
Yes, sure, I get the idea of insecurity, but I was very safe :) Thx for your tip though, that helped me too (yes, through the years)Tho
Not very cross OS, startfile only exists on Windows (#29823528).Paederast
Another bummer: os.startfile() does not accept arguments ☹ Although in case of the Explorer it seems easy to have the process detached via subprocess.run or PopenGeithner
This function reject path like ./some/folder. you may use os.path.abspath("./some/folder") to convert the path first.Uncanny
"Using subprocess is always kind of a bad idea" ... what? No, it isn't.Fluorescence
@GlennMaynard Because for example, cmd=r'explorer /select,"C:\path\of\folder\file"'; subprocess.Popen(cmd) if the string cmd is compromised by an evil user it can for example create a new file (example on window): 'cmd /c type NUL > 1.txt'. With more imagination there is a lot of evil things to do, and that's why i think playing with subprocess is not a good idea.Varicotomy
G
16

As explorer could be overridden it would be a little safer to point to the executable directly. (just had to be schooled on this too)

And while you're at it: use Python 3s current subprocess API: run()

import os
import subprocess
FILEBROWSER_PATH = os.path.join(os.getenv('WINDIR'), 'explorer.exe')

def explore(path):
    # explorer would choke on forward slashes
    path = os.path.normpath(path)

    if os.path.isdir(path):
        subprocess.run([FILEBROWSER_PATH, path])
    elif os.path.isfile(path):
        subprocess.run([FILEBROWSER_PATH, '/select,', path])
Geithner answered 21/6, 2018 at 9:56 Comment(4)
This is not working on windows 10. It opens My PCPistol
@Patt: I just tried r'C:\path\file.exe', C:\\path\\file.exe and C:/path/file.exe they all work. You just need to make sure your path is properly formatted and os.path.isfile works on it.Geithner
@Spencer: No, that doesn't matter. That's what path = os.path.normpath(path) is for :)Geithner
@Geithner Yup, missed that... Deleted my comment.Miley
M
13

For some reason, on windows 7 it always opens the users Path, for me following worked out:

import subprocess
subprocess.call("explorer C:\\temp\\yourpath", shell=True)
Musicianship answered 2/12, 2014 at 13:51 Comment(4)
subprocess.Popen(r'explorer /select,"C:\path\of\folder\file"') works, but how do I get this window on top of other windows, if the user goes to some other window after having executed this statement somewhere in his program?Gershon
This should automatically pop at the frontMusicianship
Try to avoid use of shell=True tho! security.openstack.org/guidelines/…Geithner
As long as you know where you are using and it's in a closed environment, that's fineMusicianship
A
11

Alternatively, you could use the fileopenbox module of EasyGUI to open the file explorer for the user to click through and then select a file (returning the full filepath).

import easygui
file = easygui.fileopenbox()
Anglicism answered 18/10, 2018 at 19:48 Comment(0)
F
8

For anyone wondering how to use a variable in place of a direct file path. The code below will open explorer and highlight the file specified.

import subprocess
subprocess.Popen(f'explorer /select,{variableHere}')

The code below will just open the specified folder in explorer without highlighting any specific file.

import subprocess
subprocess.Popen(f'explorer "{variableHere}"')

Ive only tested on windows

Fresher answered 15/12, 2020 at 15:57 Comment(1)
In python 3 this should be a raw format string, i.e. subprocess.Popen(fr'explorer "{variableHere}"')Miley
G
2
import os 
path = "C:\path\of\folder"
os.startfile(path)

using this cmd you can go to the path in the file explorer

Grandnephew answered 26/3, 2023 at 14:3 Comment(0)
P
1

Code To Open Folder In Explorer:

import os
import ctypes
SW_SHOWDEFAULT = 10
path_to_open = os.getenv('windir')
ctypes.windll.shell32.ShellExecuteW(0, "open", path_to_open, 0, 0, SW_SHOWDEFAULT)
Paludal answered 6/12, 2021 at 6:27 Comment(0)
W
1
import subprocess
subprocess.Popen(r'explorer /open,"C:\path\of\folder\file"')

I find that the explorer /open command will list the files in the directory. When I used the /select command (as shown above), explorer opened the parent directory and had my directory highlighted.

Wittie answered 6/7, 2022 at 18:17 Comment(0)
D
0
import os
os.system('notepad filename')

Example 1. If I have a file no.txt in same directory

os.system('notepad no.txt')

Example 2. If I want to open file in some other directory

os.system('notepad "C:\\Users\\DELL\\Downloads\\a.txt"')

Note: I am running this on windows thats why I am using notepad, you can replace according to your os.

Diamond answered 26/3, 2023 at 7:30 Comment(0)
H
0

This is not entirely an answer to the question, but it helped me so I thought it might help others too.

If you use are using wxPython/wxWidgets, you can try the wx.LaunchDefaultApplication and wx.LaunchDefaultBrowser methods. I'm not sure how they behave on Windows, but on my Linux setup they both open my default file manager if I provide a local path that points to a directory as the document or url parameter, respectively.

Hydrocele answered 13/8, 2023 at 10:2 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.