Python,获取当前登录用户的Windows特殊文件夹

Pri*_*moz 20 python windows pywin32

如何从我的Python脚本中获取Windows特殊文件夹,如My Documents,Desktop等?我需要win32扩展吗?

它必须适用于Windows 2000到Windows 7.

And*_*Dog 20

您可以使用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)
Run Code Online (Sandbox Code Playgroud)

检查shellcon.CSIDL_xxx其他可能的文件夹.

我认为使用pywin32是最好的方法.否则你必须以某种方式使用它ctypes来访问该SHGetFolderPath功能(其他解决方案可能是可能的,但这些是我所知道的).


bob*_*nce 20

如果您希望在没有win32扩展名的情况下执行此操作,可以使用ctypes调用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'
Run Code Online (Sandbox Code Playgroud)


Chr*_*heD 5

尝试winshell(完全为此目的而制作):

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 ()
Run Code Online (Sandbox Code Playgroud)

  • 它只是pywin32的一个包装器,如果我需要pywin32,我宁愿在没有其他层的情况下使用它. (4认同)

小智 5

import win32com.client
oShell = win32com.client.Dispatch("Wscript.Shell")
print oShell.SpecialFolders("Desktop")
Run Code Online (Sandbox Code Playgroud)