Python 获取“我的文档”等win系统路径的几种方法_python 我的文档_Hann Yang的博客-程序员宅基地

技术标签: python  我的文档  路径  桌面  windows  Python  

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

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


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

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


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'代替。

 

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

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))

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/boysoft2002/article/details/115495837

智能推荐

密码学_Greyb0y的博客-程序员宅基地

古典密码的介绍一、目录什么是密码学凯撒加密关键词加密仿射加密单表替代加密分析维吉尼亚加密替换和编码二、正文1、什么是密码学“密码学是一个多面的世界,对一些人来说,它是一个侦探与保密的世界,对另一些人来说,它是数学与计算机的世界。无论你如何看待它,密码学都是神秘而富有冒险色彩的。它还超越了传统的学术学科。它不只是计算机科学的内容,密码学的研究包括历史、政治学、工程、语言军事学、伦理、数学和工业技术学等。”——《经典密码学与现代密码学》古典密码和现代密码的区别**古典密码学:**

centos 安装pysqlite-2.8.3.tar.gz src/connection.h:26:20: fatal error: Python.h: No such file or direct_centos 无法安装pysqlite_办公室里穿拖鞋的博客-程序员宅基地

将安装包pysqlite-2.8.3.tar.gz下载发哦服务器后,运行pip install  pysqlite-2.8.3.tar.gz 出现报错:src/connection.h:26:20: fatal error: Python.h: No such file or directory解决办法:yum install python-dev 或者 python-de

从CRP(关键渲染路径)优化中谈浏览器渲染原理_莫纷飞的博客-程序员宅基地

浏览器从收到 HTML、CSS 和 JavaScript 字节到对其进行必需的处理,从而将它们转变成渲染的像素这一过程中有一些中间步骤,这些必要的步骤,就是CRP浏览器完成的步骤:处理 HTML 标记并构建 DOM 树。处理 CSS 标记并构建 CSSOM 树。将 DOM 与 CSSOM 合并成一个渲染树。根据渲染树来布局,以计算每个节点的几何信息。将各个节点绘制到屏幕上。

LeetCode(240):搜索二维矩阵 II(Java)_NJU_ChopinXBP的博客-程序员宅基地

2019.9.21 #程序员笔试必备# LeetCode 从零单刷个人笔记整理(持续更新)之前有做过相同的题目:#数据结构与算法学习笔记#剑指Offer1:二维数组中的查找(JAVA、C/C++),如今再重做一次还是感慨万千。两种方法:1.从左下角开始遍历,若数字比target小,则行+1;若数字比target大,则列-1。2.对每一行二分查找。传送门:搜索二维矩阵 IIWrite a...

python 交互式流程图_使用Python创建漂亮的交互式和弦图_weixin_26713521的博客-程序员宅基地

python 交互式流程图 Python中的数据可视化 (Data Visualization in Python)R vs Python is a constant tussle when it comes to what is the best language, according to data scientists. Though each language has it’s stre...

html游戏存档在哪里,steam游戏存档位置在哪里-查找steam游戏存档位置的方法 - 河东软件园..._源汉字密码探源的博客-程序员宅基地

Steam是一款发型时间比较久的游戏平台,因此在这个平台中我们可以下载到小时候的游戏怀旧,也可以感受到目前最先进的游戏程序。在使用这个软件的时候我们会将自己的游戏进度存档,一般很多的单机游戏是不能一次性玩通关的,若是不存档,那么在下次玩这款游戏的时候就需要从第一关开始。无论是我们需要继续玩游戏还是清理系统垃圾,都需要找到这些存档的文件。那么在存档之后你知道这些文件保存在哪里了么?找不到的用户可以试...

随便推点

基于python和mysql实现成绩管理系统_chenshixi3325的博客-程序员宅基地

一、需求分析 1.1 背景 软件名称:学生选课与成绩管理系统 用户:学生,老师 1.2 任务目标 提供学生选课与退课功能 提供老师登入成绩功能 系统复合实际使用要求,人机界面交互友好,操作方便 1.3 运行环境 python 3.6 mysql 二...

目标检测论文:SqueezeNet:AlexNet-level accuracy with 50x fewer parameters and 0.5MB Model Size及其PyTorch实现_mingo_敏的博客-程序员宅基地

SqueezeNet:AlexNet-level accuracy with 50x fewer parameters and < 0.5MB Model Size论文链接:https://arxiv.org/pdf/1807.11164.pdfPyTorch:https://github.com/shanglianlm0525/Lightweight-networkFire modu...

月薪(32K)程序员的分享:学习python需要有编程基础吗?_不想秃头的晨晨的博客-程序员宅基地

当然,在计算机方面的基础越好,对学习任何一门新的编程语言越有利。但如果你在编程语言的学习上属于零基础,也不用担心,因为无论用哪门语言作为学习编程的入门语言,总是要有一个开始。就我个人的观点,Python 作为学习编程的入门语言是再合适不过的。凡是在大学计算机专业学习过 C 语言的同学都感同身受,认为 C 语言不是很好的入门语言,很多曾经立志学习编程的读者,在学习了 C 语言之后,就决心不再学习编程。因此,是否学会 C 语言,好像成为了进入编程行业的筛选标准。但是,如果将 Python 作为编程入门语言

Angular base64 编码_vancece的博客-程序员宅基地

这个原理很简单,但我却弄了很久/捂脸,终于成功了,记录下来html<input type="file" id="file"><input type="submit" (click)="turnToBase64()">ts/js turnToBase64() { const getfile = document.getElementById('file...

人工智能、机器学习、深度学习从入门到进阶学习资料整理_人工智能基础 进阶课程_the_cleaner的博客-程序员宅基地

AI方面的学习资料,包含了学习社区、入门教程、汲取学习、深度学习、自然语言处理、计算机视觉、数据分析、面试和书籍等方面的知识。

8,spark on yarn ,任务提交 ,spark-shell ,查看集群资源 ,分区实验_spark-shell yarn_孙砚秋的博客-程序员宅基地

一 ,spark on yarn :1 ,spark 概念 :Driver:和 ClusterManager 通信,进行资源申请、任务分配并监督其运行状况等。ClusterManager :这里指 YARN。DAGScheduler :把 spark 作业转换成 Stage 的 DAG 图。TaskScheduler :把 Task 分配给具体的 Executor。2 ,yarn ...

推荐文章

热门文章

相关标签