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

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

ctypes.wintypes

import ctypes.wintypes
def getDocPath(pathID=5):
    '''path=5: My Documents'''
    buf= ctypes.create_unicode_buffer(ctypes.wintypes.MAX_PATH)
    ctypes.windll.shell32.SHGetFolderPathW(None, pathID, None, 0, buf)
    return buf.value
for i in range(60):
    print(i,getDocPath(i))
print('\nMy Documents\' Path:',end='\n\t')
print(getDocPath())

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



0 C:\Users\Administrator\Desktop

1  

2 C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs

3  

4  

5 d:\Documents

6 d:\Favorites

7 C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

8 C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Recent

9 C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\SendTo

10  

11 C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu

12  

13 C:\Users\Administrator\Music

14 C:\Users\Administrator\Videos

15  

16 C:\Users\Administrator\Desktop

17  

18  

19 C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Network Shortcuts

20 C:\Windows\Fonts

21 C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Templates

22 C:\ProgramData\Microsoft\Windows\Start Menu

23 C:\ProgramData\Microsoft\Windows\Start Menu\Programs

24 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup

25 C:\Users\Public\Desktop

26 C:\Users\Administrator\AppData\Roaming

27 C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Printer Shortcuts

28 C:\Users\Administrator\AppData\Local

29 C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

30 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup

31 d:\Favorites

32 C:\Users\Administrator\AppData\Local\Microsoft\Windows\Temporary Internet Files

33 C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Cookies

34 C:\Users\Administrator\AppData\Local\Microsoft\Windows\History

35 C:\ProgramData

36 C:\Windows

37 C:\Windows\system32

38 C:\Program Files

39 d:\Pictures

40 C:\Users\Administrator

41 C:\Windows\SysWOW64

42 C:\Program Files (x86)

43 C:\Program Files\Common Files

44 C:\Program Files (x86)\Common Files

45 C:\ProgramData\Microsoft\Windows\Templates

46 C:\Users\Public\Documents

47 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Administrative Tools

48 C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Administrative Tools

49  

50  

51  

52  

53 C:\Users\Public\Music

54 C:\Users\Public\Pictures

55 C:\Users\Public\Videos

56 C:\Windows\resources

57 C:\Windows\resources\0804

58 C:\ProgramData\OEM Links

59 C:\Users\Administrator\AppData\Local\Microsoft\Windows\Burn\Burn

My Documents' Path:

   d:\Documents





win32com.shell

from win32com.shell import shell
def getDocPath(pathID=5):
    try:
        return shell.SHGetFolderPath(0, pathID, None, 0)
    except:
        return ''
for i in range(60):
    print(i,getDocPath(i))
print('\nMy Documents\' Path:',end='\n\t')
print(getDocPath())


运行结果:(同 ctypes.windll.shell32.SHGetFolderPathW() 返回的完全一致,但本函数 win32com.shell.SHGetFolderPath() 若pathID不存在会报错退出,所以用了try...except语句)
0 C:\Users\Administrator\Desktop
1 
2 C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs
3 
4 
5 d:\Documents
6 d:\Favorites
7 C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
8 C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Recent
9 C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\SendTo
10 
11 C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu
12 
13 C:\Users\Administrator\Music
14 C:\Users\Administrator\Videos
15 
16 C:\Users\Administrator\Desktop
17 
18 
19 C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Network Shortcuts
20 C:\Windows\Fonts
21 C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Templates
22 C:\ProgramData\Microsoft\Windows\Start Menu
23 C:\ProgramData\Microsoft\Windows\Start Menu\Programs
24 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
25 C:\Users\Public\Desktop
26 C:\Users\Administrator\AppData\Roaming
27 C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Printer Shortcuts
28 C:\Users\Administrator\AppData\Local
29 C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
30 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
31 d:\Favorites
32 C:\Users\Administrator\AppData\Local\Microsoft\Windows\Temporary Internet Files
33 C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Cookies
34 C:\Users\Administrator\AppData\Local\Microsoft\Windows\History
35 C:\ProgramData
36 C:\Windows
37 C:\Windows\system32
38 C:\Program Files
39 d:\Pictures
40 C:\Users\Administrator
41 C:\Windows\SysWOW64
42 C:\Program Files (x86)
43 C:\Program Files\Common Files
44 C:\Program Files (x86)\Common Files
45 C:\ProgramData\Microsoft\Windows\Templates
46 C:\Users\Public\Documents
47 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Administrative Tools
48 C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Administrative Tools
49 
50 
51 
52 
53 C:\Users\Public\Music
54 C:\Users\Public\Pictures
55 C:\Users\Public\Videos
56 C:\Windows\resources
57 C:\Windows\resources\0804
58 C:\ProgramData\OEM Links
59 C:\Users\Administrator\AppData\Local\Microsoft\Windows\Burn\Burn
My Documents' Path:
    d:\Documents



os.path


用函数os.path.expanduser('~') 或者:os.path.expandvars('$HOME') 获取用户路径

>>> from os import path
>>> path.expanduser('~')
'C:\\Users\\Administrator'
>>> os.path.expandvars('$HOME')
'C:\\Users\\Administrator
>>> path.expanduser('~\Desktop')
'C:\\Users\\Administrator\\Desktop'
>>> docPath=path.expanduser('~\Documents')
>>> docPath
'C:\\Users\\Administrator\\Documents'
>>> 


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

 

import os.path
def getDocPath():
    return os.path.expanduser('~\Documents')
print(getDocPath())


configparser.ConfigParser


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


E:\>pip install ConfigParser
Collecting ConfigParser
  Downloading configparser-5.0.2-py3-none-any.whl (19 kB)
Installing collected packages: ConfigParser
Successfully installed ConfigParser-5.0.2


import os
import configparser
def getDocPath():
    os.system("@echo [HOME]>c:\home.ini")
    os.system("@set HOME>>c:\home.ini")
    config = configparser.ConfigParser()
    config.read_file(open(r'c:\home.ini'))
    path = config.get("HOME","HOME")
    os.remove(r'c:\home.ini')
    return path + '\Documents'
print(getDocPath())


os.getenv


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

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


>>> import os
>>> os.getenv("HOME")
'C:\\Users\\Administrator'
>>> os.environ['HOME']
'C:\\Users\\Administrator'
>>> os.environ
environ({'ALLUSERSPROFILE': 'C:\\ProgramData', 'APPDATA': 'C:\\Users\\Administrator\\AppData\\Roaming', 'ASL.LOG': 'Destination=file', 'COMMONPROGRAMFILES': 'C:\\Program Files\\Common Files', 'COMMONPROGRAMFILES(X86)': 'C:\\Program Files (x86)\\Common Files', 'COMMONPROGRAMW6432': 'C:\\Program Files\\Common Files', 'COMPUTERNAME': 'PC-20160915', 'COMSPEC': 'C:\\Windows\\system32\\cmd.exe', 'FP_NO_HOST_CHECK': 'NO', 'FREI0R_PATH': 'C:\\Program Files (x86)\\APOWER~1\\VIDEOC~1\\frei0r;C:\\Program Files (x86)\\Apowersoft\\Video Converter Studio\\frei0r', 'HOME': 'C:\\Users\\Administrator', 'HOMEDRIVE': 'C:', 'HOMEPATH': '\\Users\\Administrator', 'LNKEVN': 'C:\\Program Files (x86)\\Internet Explorer\\iexplore.exe', 'LOCALAPPDATA': 'C:\\Users\\Administrator\\AppData\\Local', 'LOGONSERVER': '\\\\PC-20160915', 'MOZ_PLUGIN_PATH': 'C:\\Program Files (x86)\\Foxit Software\\Foxit Reader\\plugins\\', 'NUMBER_OF_PROCESSORS': '2', 'OS': 'Windows_NT', 'PATH': 'C:\\Windows\\system32;C:\\Windows;C:\\Windows\\System32\\Wbem;C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\;C:\\Program Files\\Calibre2\\;C:\\Program Files (x86)\\Microsoft SQL Server\\100\\Tools\\Binn\\;C:\\Program Files\\Microsoft SQL Server\\100\\Tools\\Binn\\;C:\\Program Files\\Microsoft SQL Server\\100\\DTS\\Binn\\;E:\\Python\\Scripts\\;E:\\Python\\;C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Launcher\\;E:\\PyCharm\\bin;', 'PATHEXT': '.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC', 'PROCESSOR_ARCHITECTURE': 'AMD64', 'PROCESSOR_IDENTIFIER': 'Intel64 Family 6 Model 23 Stepping 10, GenuineIntel', 'PROCESSOR_LEVEL': '6', 'PROCESSOR_REVISION': '170a', 'PROGRAMDATA': 'C:\\ProgramData', 'PROGRAMFILES': 'C:\\Program Files', 'PROGRAMFILES(X86)': 'C:\\Program Files (x86)', 'PROGRAMW6432': 'C:\\Program Files', 'PSMODULEPATH': 'C:\\Windows\\system32\\WindowsPowerShell\\v1.0\\Modules\\', 'PUBLIC': 'C:\\Users\\Public', 'PYCHARM COMMUNITY EDITION': 'E:\\PyCharm\\bin;', 'SESSIONNAME': 'Console', 'SYSTEMDRIVE': 'C:', 'SYSTEMROOT': 'C:\\Windows', 'TEMP': 'C:\\Users\\ADMINI~1\\AppData\\Local\\Temp', 'TMP': 'C:\\Users\\ADMINI~1\\AppData\\Local\\Temp', 'USERDOMAIN': 'PC-20160915', 'USERNAME': 'Administrator', 'USERPROFILE': 'C:\\Users\\Administrator', 'VS100COMNTOOLS': 'C:\\Program Files (x86)\\Microsoft Visual Studio 10.0\\Common7\\Tools\\', 'WINDIR': 'C:\\Windows', 'WINDOWS_TRACING_FLAGS': '3', 'WINDOWS_TRACING_LOGFILE': 'C:\\BVTBin\\Tests\\installpackage\\csilogfile.log', '_DFX_INSTALL_UNSIGNED_DRIVER': '1'})
>>> 
import os
def getDocPath():
    return os.getenv("home")+'\Documents'
def getDesktopPath():
    return os.getenv("home")+'\Desktop'
print(getDocPath())
print(getDesktopPath())



winreg.OpenKey

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


import winreg
def getDocPath():
    key = winreg.OpenKey(winreg.HKEY_CURRENT_USER,r'Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders')
    return winreg.QueryValueEx(key, "{374DE290-123F-4565-9164-39C4925E467B}")[0]
print(getDocPath())


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


20210407223115574.png


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

from os import path as p
import ctypes.wintypes
def getDocPath(pathID=5):
    '''默认返回我的文档路径,buf为空则返回当前工作路径'''
    buf= ctypes.create_unicode_buffer(ctypes.wintypes.MAX_PATH)
    ctypes.windll.shell32.SHGetFolderPathW(None, pathID, None, 0, buf)
    return p.dirname(p.realpath(__file__)) if buf.value=='' else buf.value
print(getDocPath())
print(getDocPath(60))


或者:

import os
from win32com.shell import shell
def getDocPath(pathID=5):
    '''默认返回我的文档路径,出错则返回当前工作路径'''
    try:
        return shell.SHGetFolderPath(0, pathID, None, 0)
    except:
        return os.path.dirname(os.path.realpath(__file__))
print(getDocPath())
print(getDocPath(60))



目录
相关文章
|
9天前
|
JSON 数据可视化 API
Python 中调用 DeepSeek-R1 API的方法介绍,图文教程
本教程详细介绍了如何使用 Python 调用 DeepSeek 的 R1 大模型 API,适合编程新手。首先登录 DeepSeek 控制台获取 API Key,安装 Python 和 requests 库后,编写基础调用代码并运行。文末包含常见问题解答和更简单的可视化调用方法,建议收藏备用。 原文链接:[如何使用 Python 调用 DeepSeek-R1 API?](https://apifox.com/apiskills/how-to-call-the-deepseek-r1-api-using-python/)
|
1月前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的眼疾识别系统实现~人工智能+卷积网络算法
眼疾识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了4种常见的眼疾图像数据集(白内障、糖尿病性视网膜病变、青光眼和正常眼睛) 再使用通过搭建的算法模型对数据集进行训练得到一个识别精度较高的模型,然后保存为为本地h5格式文件。最后使用Django框架搭建了一个Web网页平台可视化操作界面,实现用户上传一张眼疾图片识别其名称。
130 5
基于Python深度学习的眼疾识别系统实现~人工智能+卷积网络算法
|
5天前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的【蘑菇识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
蘑菇识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了9种常见的蘑菇种类数据集【"香菇(Agaricus)", "毒鹅膏菌(Amanita)", "牛肝菌(Boletus)", "网状菌(Cortinarius)", "毒镰孢(Entoloma)", "湿孢菌(Hygrocybe)", "乳菇(Lactarius)", "红菇(Russula)", "松茸(Suillus)"】 再使用通过搭建的算法模型对数据集进行训练得到一个识别精度较高的模型,然后保存为为本地h5格式文件。最后使用Django框架搭建了一个Web网页平台可视化操作界面,
42 11
基于Python深度学习的【蘑菇识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
|
26天前
|
人工智能 自然语言处理 算法
随机的暴力美学蒙特卡洛方法 | python小知识
蒙特卡洛方法是一种基于随机采样的计算算法,广泛应用于物理学、金融、工程等领域。它通过重复随机采样来解决复杂问题,尤其适用于难以用解析方法求解的情况。该方法起源于二战期间的曼哈顿计划,由斯坦尼斯拉夫·乌拉姆等人提出。核心思想是通过大量随机样本来近似真实结果,如估算π值的经典示例。蒙特卡洛树搜索(MCTS)是其高级应用,常用于游戏AI和决策优化。Python中可通过简单代码实现蒙特卡洛方法,展示其在文本生成等领域的潜力。随着计算能力提升,蒙特卡洛方法的应用范围不断扩大,成为处理不确定性和复杂系统的重要工具。
65 21
|
24天前
|
数据挖掘 数据处理 开发者
Python3 自定义排序详解:方法与示例
Python的排序功能强大且灵活,主要通过`sorted()`函数和列表的`sort()`方法实现。两者均支持`key`参数自定义排序规则。本文详细介绍了基础排序、按字符串长度或元组元素排序、降序排序、多条件排序及使用`lambda`表达式和`functools.cmp_to_key`进行复杂排序。通过示例展示了如何对简单数据类型、字典、类对象及复杂数据结构(如列车信息)进行排序。掌握这些技巧可以显著提升数据处理能力,为编程提供更强大的支持。
30 10
|
1月前
|
机器学习/深度学习 算法 前端开发
基于Python深度学习果蔬识别系统实现
本项目基于Python和TensorFlow,使用ResNet卷积神经网络模型,对12种常见果蔬(如土豆、苹果等)的图像数据集进行训练,构建了一个高精度的果蔬识别系统。系统通过Django框架搭建Web端可视化界面,用户可上传图片并自动识别果蔬种类。该项目旨在提高农业生产效率,广泛应用于食品安全、智能农业等领域。CNN凭借其强大的特征提取能力,在图像分类任务中表现出色,为实现高效的自动化果蔬识别提供了技术支持。
基于Python深度学习果蔬识别系统实现
|
1月前
|
Python
[oeasy]python057_如何删除print函数_dunder_builtins_系统内建模块
本文介绍了如何删除Python中的`print`函数,并探讨了系统内建模块`__builtins__`的作用。主要内容包括: 1. **回忆上次内容**:上次提到使用下划线避免命名冲突。 2. **双下划线变量**:解释了双下划线(如`__name__`、`__doc__`、`__builtins__`)是系统定义的标识符,具有特殊含义。
32 3
|
6月前
|
IDE API 开发工具
|
9月前
|
IDE 开发工具 开发者
Python函数说明文档:编写清晰易懂的文档字符串
Python函数说明文档:编写清晰易懂的文档字符串
139 1
|
9月前
|
Python
Python 的编码规范和最佳实践: 解释 Python 的文档字符串(docstring)是什么?如何编写好的文档字符串?
【4月更文挑战第16天】Python docstrings是注释,用于说明代码功能。放置于对象定义前,用三引号包围。遵循PEP 257,使用reStructuredText格式,确保简洁、完整、准确。例如: ```markdown ```python def add(a, b): """ 计算两数之和。 参数: a -- 第一加数 b -- 第二加数 返回: 和 """ return a + b ``` ```
160 0

热门文章

最新文章