2023年12月7日发(作者:)

Python获取“我的文档”等win系统路径的几种方法

es

import es

def getDocPath(pathID=5):

'''path=5: My Documents'''

buf= _unicode_buffer(_PATH)

olderPathW(None, pathID, None, 0, buf)

return

for i in range(60):

print(i,getDocPath(i))

print('nMy Documents' Path:',end='nt')

print(getDocPath())

运行结果:(可以得到几十种windows系统路径)

0 C:UsersAdministratorDesktop

1

2 C:UsersAdministratorAppDataRoamingMicrosoftWindowsStart MenuPrograms

3

4

5 d:Documents

6 d:Favorites

7 C:UsersAdministratorAppDataRoamingMicrosoftWindowsStart MenuProgramsStartup

8 C:UsersAdministratorAppDataRoamingMicrosoftWindowsRecent

9 C:UsersAdministratorAppDataRoamingMicrosoftWindowsSendTo

10

11 C:UsersAdministratorAppDataRoamingMicrosoftWindowsStart Menu

12

13 C:UsersAdministratorMusic

14 C:UsersAdministratorVideos

15

16 C:UsersAdministratorDesktop

17

18

19 C:UsersAdministratorAppDataRoamingMicrosoftWindowsNetwork Shortcuts

20 C:WindowsFonts

21 C:UsersAdministratorAppDataRoamingMicrosoftWindowsTemplates

22 C:ProgramDataMicrosoftWindowsStart Menu

23 C:ProgramDataMicrosoftWindowsStart MenuPrograms

24 C:ProgramDataMicrosoftWindowsStart MenuProgramsStartup

25 C:UsersPublicDesktop

26 C:UsersAdministratorAppDataRoaming

27 C:UsersAdministratorAppDataRoamingMicrosoftWindowsPrinter Shortcuts

28 C:UsersAdministratorAppDataLocal

29 C:UsersAdministratorAppDataRoamingMicrosoftWindowsStart MenuProgramsStartup

30 C:ProgramDataMicrosoftWindowsStart MenuProgramsStartup

31 d:Favorites

32 C:UsersAdministratorAppDataLocalMicrosoftWindowsTemporary Internet Files

33 C:UsersAdministratorAppDataRoamingMicrosoftWindowsCookies

34 C:UsersAdministratorAppDataLocalMicrosoftWindowsHistory

35 C:ProgramData

35 C:ProgramData

36 C:Windows

37 C:Windowssystem32

38 C:Program Files

39 d:Pictures

40 C:UsersAdministrator

41 C:WindowsSysWOW64

42 C:Program Files (x86)

43 C:Program FilesCommon Files

44 C:Program Files (x86)Common Files

45 C:ProgramDataMicrosoftWindowsTemplates

46 C:UsersPublicDocuments

47 C:ProgramDataMicrosoftWindowsStart MenuProgramsAdministrative Tools

48 C:UsersAdministratorAppDataRoamingMicrosoftWindowsStart MenuProgramsAdministrative Tools

49

50

51

52

53 C:UsersPublicMusic

54 C:UsersPublicPictures

55 C:UsersPublicVideos

56 C:Windowsresources

57 C:Windowsresources0804

58 C:ProgramDataOEM Links

59 C:UsersAdministratorAppDataLocalMicrosoftWindowsBurnBurn

My Documents' Path:

d:Documents

from import shell

def getDocPath(pathID=5):

try:

return olderPath(0, pathID, None, 0)

except:

return ''

for i in range(60):

print(i,getDocPath(i))

print('nMy Documents' Path:',end='nt')

print(getDocPath())

运行结果:(同 olderPathW() 返回的完全一致,但本函数 olderPath()

若pathID不存在会报错退出,所以用了pt语句)

0 C:UsersAdministratorDesktop

1

2 C:UsersAdministratorAppDataRoamingMicrosoftWindowsStart MenuPrograms

3

4

5 d:Documents

6 d:Favorites

7 C:UsersAdministratorAppDataRoamingMicrosoftWindowsStart MenuProgramsStartup8 C:UsersAdministratorAppDataRoamingMicrosoftWindowsRecent9 C:UsersAdministratorAppDataRoamingMicrosoftWindowsSendTo10

11 C:UsersAdministratorAppDataRoamingMicrosoftWindowsStart Menu12

13 C:UsersAdministratorMusic14 C:UsersAdministratorVideos15

16 C:UsersAdministratorDesktop17

18

19 C:UsersAdministratorAppDataRoamingMicrosoftWindowsNetwork Shortcuts20 C:WindowsFonts21 C:UsersAdministratorAppDataRoamingMicrosoftWindowsTemplates22 C:ProgramDataMicrosoftWindowsStart Menu23 C:ProgramDataMicrosoftWindowsStart MenuPrograms24 C:ProgramDataMicrosoftWindowsStart MenuProgramsStartup25 C:UsersPublicDesktop26 C:UsersAdministratorAppDataRoaming27 C:UsersAdministratorAppDataRoamingMicrosoftWindowsPrinter Shortcuts28 C:UsersAdministratorAppDataLocal29 C:UsersAdministratorAppDataRoamingMicrosoftWindowsStart MenuProgramsStartup30 C:ProgramDataMicrosoftWindowsStart MenuProgramsStartup31 d:Favorites32 C:UsersAdministratorAppDataLocalMicrosoftWindowsTemporary Internet Files33 C:UsersAdministratorAppDataRoamingMicrosoftWindowsCookies34 C:UsersAdministratorAppDataLocalMicrosoftWindowsHistory35 C:ProgramData36 C:Windows37 C:Windowssystem3238 C:Program Files39 d:Pictures40 C:UsersAdministrator41 C:WindowsSysWOW6442 C:Program Files (x86)43 C:Program FilesCommon Files44 C:Program Files (x86)Common Files45 C:ProgramDataMicrosoftWindowsTemplates46 C:UsersPublicDocuments47 C:ProgramDataMicrosoftWindowsStart MenuProgramsAdministrative Tools48 C:UsersAdministratorAppDataRoamingMicrosoftWindowsStart MenuProgramsAdministrative Tools49

50

51

52

53 C:UsersPublicMusic54 C:UsersPublicPictures55 C:UsersPublicVideos56 C:Windowsresources57 C:Windowsresources080458 C:ProgramDataOEM Links59 C:UsersAdministratorAppDataLocalMicrosoftWindowsBurnBurnMy Documents' Path: d:Documents

用函数user('~') 或者:vars('$HOME') 获取用户路径

>>> from os import path

>>> user('~')

'C:UsersAdministrator'

>>> vars('$HOME')

'C:UsersAdministrator

>>> user('~Desktop')

'C:UsersAdministratorDesktop'

>>> docPath=user('~Documents')

>>> docPath

'C:UsersAdministratorDocuments'

>>>

比较简短,但不是很方便。其对应的参数是系统路径的文本不是数字,且只是系统用户名下的默认路径。

import

def getDocPath():

return user('~Documents')

print(getDocPath())

Parser

由()从环境变量中获取路径写入.ini文件,用函数ConfigParser()来读取(需要安装configparser库)。

E:>pip install ConfigParser

Collecting ConfigParser

Downloading (19 kB)

Installing collected packages: ConfigParser

Successfully installed ConfigParser-5.0.2

import os

import configparser

def getDocPath():

("@echo [HOME]>c:")

("@set HOME>>c:")

config = Parser()

_file(open(r'c:'))

path = ("HOME","HOME")

(r'c:')

return path + 'Documents'

print(getDocPath())

用函数('HOME']) 或者n['HOME']直接获取环境变量,不用读写ini文件。

注意:两者所用括号的区别,后者不是函数而是字典,n 返回全部环境变量。

>>> import os

>>> ("HOME")

'C:UsersAdministrator'

>>> n['HOME']

'C:UsersAdministrator'

>>> n

>>>

environ({'ALLUSERSPROFILE': 'C:ProgramData', 'APPDATA': 'C:UsersAdministratorAppDataRoaming', '': 'Destination=file', 'COMMONPROGRAM

import os

def getDocPath():

return ("home")+'Documents'

def getDesktopPath():

return ("home")+'Desktop'

print(getDocPath())

print(getDesktopPath())

y

从注册表中读取,“我的文档”是个特殊键,键值为: {374DE290-123F-4565-9164-39C4925E467B}

import winreg

def getDocPath():

key = y(_CURRENT_USER,r'SoftwareMicrosoftWindowsCurrentVersionExplorerShell Folders')

return alueEx(key, "{374DE290-123F-4565-9164-39C4925E467B}")[0]

print(getDocPath())

由以下截图可以看出“桌面”可以用'Desktop'来获取;“我的文档”除了上面那个特殊值也能用'Personal'代替。

综上这么几种方法,比较倾向于推荐前二种方法! 总结代码如下:

from os import path as p

import es

def getDocPath(pathID=5):

'''默认返回我的文档路径,buf为空则返回当前工作路径'''

buf= _unicode_buffer(_PATH)

olderPathW(None, pathID, None, 0, buf)

return e(th(__file__)) if =='' else

print(getDocPath())

print(getDocPath(60))

或者:

import os

from import shell

def getDocPath(pathID=5):

'''默认返回我的文档路径,出错则返回当前工作路径'''

try:

return olderPath(0, pathID, None, 0)

except:

return e(th(__file__))

print(getDocPath())

print(getDocPath(60))