win32print - Python, obtenga carpetas especiales de Windows para el usuario que ha iniciado sesión actualmente
pywin64 (5)
¿Cómo puedo obtener carpetas especiales de Windows como Mis documentos, Escritorio, etc. desde mi script de Python? ¿Necesito extensiones de win32?
Debe funcionar en Windows 2000 a Windows 7.
Intente winshell (hecho exactamente para este propósito):
import winshell
print ''Desktop =>'', winshell.desktop ()
print ''Common Desktop =>'', winshell.desktop (1)
print ''Application Data =>'', winshell.application_data ()
print ''Common Application Data =>'', winshell.application_data (1)
print ''Bookmarks =>'', winshell.bookmarks ()
print ''Common Bookmarks =>'', winshell.bookmarks (1)
print ''Start Menu =>'', winshell.start_menu ()
print ''Common Start Menu =>'', winshell.start_menu (1)
print ''Programs =>'', winshell.programs ()
print ''Common Programs =>'', winshell.programs (1)
print ''Startup =>'', winshell.startup ()
print ''Common Startup =>'', winshell.startup (1)
print ''My Documents =>'', winshell.my_documents ()
print ''Recent =>'', winshell.recent ()
print ''SendTo =>'', winshell.sendto ()
Puedes hacerlo con las extensiones pywin32:
from win32com.shell import shell, shellcon
print shell.SHGetFolderPath(0, shellcon.CSIDL_MYPICTURES, None, 0)
# prints something like C:/Documents and Settings/Username/My Documents/My Pictures
# (Unicode object)
Compruebe shellcon.CSIDL_xxx
para otras carpetas posibles.
Creo que usar pywin32 es la mejor manera. De lo contrario, tendría que usar ctypes
para acceder a la función SHGetFolderPath
alguna manera (otras soluciones podrían ser posibles, pero estas son las que conozco).
Si desea hacerlo sin las extensiones win32, puede usar ctypes
para llamar a SHGetFolderPath :
>>> import ctypes.wintypes
>>> CSIDL_PERSONAL= 5 # My Documents
>>> SHGFP_TYPE_CURRENT= 0 # Want current, not default value
>>> buf= ctypes.create_unicode_buffer(ctypes.wintypes.MAX_PATH)
>>> ctypes.windll.shell32.SHGetFolderPathW(0, CSIDL_PERSONAL, 0, SHGFP_TYPE_CURRENT, buf)
0
>>> buf.value
u''C://Documents and Settings//User//My Documents''
Un poco hacky, pero sin la necesidad de una importación especial
import os
os.popen(''echo %appdata%'').read().strip()
import win32com.client
oShell = win32com.client.Dispatch("Wscript.Shell")
print oShell.SpecialFolders("Desktop")