asd*_*dfg 69 python linux windows directory home-directory
我看到如果我们更改HOME(linux)或USERPROFILE(windows)环境变量并运行python脚本,它会在我尝试时将新值作为用户主页返回,os.environ ['HOME'] os.exp
有没有办法找到真正的用户主目录而不依赖于环境变量?
编辑:
这是一种通过在注册表中阅读http://mail.python.org/pipermail/python-win32/2008-January/006677.html在Windows中查找userhome的方法
编辑:
使用pywin32查找windows的一种方法,
from win32com.shell import shell,shellcon
home = shell.SHGetFolderPath(0, shellcon.CSIDL_PROFILE, None, 0)
Run Code Online (Sandbox Code Playgroud)
Fel*_*ing 84
我认为os.path.expanduser(path)可能会有所帮助.
在Unix和Windows上,返回带有初始组件
~或~user由该用户的主目录替换的参数.在Unix上,
~如果设置了初始值,则由环境变量HOME替换; 否则,通过内置模块在密码目录中查找当前用户的主目录pwd.直接在密码目录中查找初始化~user.在Windows上,如果设置将使用HOME和USERPROFILE,否则将使用HOMEPATH和HOMEDRIVE的组合.通过从上面派生的创建的用户路径中剥离最后一个目录组件来处理初始化
~user.如果扩展失败或者路径没有以波浪号开头,则路径将保持不变.
所以你可以这样做:
os.path.expanduser('~user')
Run Code Online (Sandbox Code Playgroud)
Bri*_*unt 15
我认为这os.path.expanduser(path)是你问题的最佳答案,但在Unix世界中有一个值得一提的替代方案:pwd包.例如
import os, pwd
pwd.getpwuid(os.getuid()).pw_dir
Run Code Online (Sandbox Code Playgroud)
Jul*_*nze 13
from pathlib import *
str(Path.home())
Run Code Online (Sandbox Code Playgroud)
适用于Python 3.5及更高版本.Path.home()返回一个Path提供API的对象,我发现它非常有用.
对于窗户;
import os
homepath = os.path.expanduser(os.getenv('USERPROFILE'))
Run Code Online (Sandbox Code Playgroud)
将为您提供当前用户主目录的句柄
filepath = os.path.expanduser(os.getenv('USERPROFILE'))+'\\Documents\\myfile.txt'
Run Code Online (Sandbox Code Playgroud)
将为您提供以下文件的句柄;
C:\Users\urUserName\Documents\myfile.txt
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
32514 次 |
| 最近记录: |