Python, получить специальные папки Windows для текущего пользователя - PullRequest
19 голосов
/ 05 октября 2010

Как я могу получить специальные папки Windows, такие как Мои документы, Рабочий стол и т. Д. Из моего скрипта Python? Нужны ли расширения Win32?

Должно работать с Windows 2000 по Windows 7.

Ответы [ 5 ]

20 голосов
/ 05 октября 2010

Если вы хотите сделать это без расширений 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'
19 голосов
/ 05 октября 2010

Вы можете сделать это с расширениями 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)

Проверьте shellcon.CSIDL_xxx для других возможных папок.

Я думаю, что использование pywin32 - лучший способ. В противном случае вам нужно было бы использовать ctypes для доступа к функции SHGetFolderPath (возможны и другие решения, но я знаю, что это те или иные решения).

5 голосов
/ 05 октября 2010

Попробуйте 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 ()
4 голосов
/ 02 марта 2011
import win32com.client
oShell = win32com.client.Dispatch("Wscript.Shell")
print oShell.SpecialFolders("Desktop")
0 голосов
/ 17 января 2019

Немного хакерский, но без специального импорта

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...