查找用户的“我的文档”路径

2024-04-26 23:33:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个小程序,它需要在“我的文档”文件夹中创建一个小的.txt文件。这是我的密码:

textfile=open('C:\Users\MYNAME\Documents','w')
lines=['stuff goes here']
textfile.writelines(lines)
textfile.close()

问题是,如果其他人使用它,我如何将MYNAME更改为他们的帐户名?


Tags: 文件文档程序txt文件夹密码hereopen
3条回答

使用os.path.expanduser(path),请参见http://docs.python.org/library/os.path.html

例如expanduser('~/filename')

根据文档,这在Unix和Windows上都有效。

编辑:正斜杠由于斯文的评论。

在Windows上,您可以使用与问题的已接受答案中所示类似的内容:Python, get windows special folders for currently logged-in user

对于My Documents文件夹路径,在shell.SHGetFolderPath()函数调用中使用shellcon.CSIDL_PERSONAL,而不是shellcon.CSIDL_MYPICTURES

因此,假设您已经安装了PyWin32扩展1,那么这个可能会工作(请参阅下面更新部分的警告):

>>> from win32com.shell import shell, shellcon
>>> shell.SHGetFolderPath(0, shellcon.CSIDL_PERSONAL, None, 0)
u'<path\\to\\folder>'

更新:我刚读到something,上面说如果用户更改了Win7文档库中的默认保存文件夹,CSIDL_PERSONAL将不会返回正确的文件夹。这是指在库的“属性”对话框中可以执行的操作:

screenshot of library properties dialog
复选标记表示路径设置为默认保存位置。

我目前不知道如何通过PyWin32调用SHLoadLibraryFromKnownFolder()函数(目前没有shell.SHLoadLibraryFromKnownFolder)。但是,应该可以使用ctypes模块这样做。

1最新版本的Python for Windows扩展的安装程序当前可从以下位置获得:http://sourceforge.net/projects/pywin32

这项工作没有任何额外的lib:

import ctypes.wintypes
CSIDL_PERSONAL = 5       # My Documents
SHGFP_TYPE_CURRENT = 0   # Get current, not default value

buf= ctypes.create_unicode_buffer(ctypes.wintypes.MAX_PATH)
ctypes.windll.shell32.SHGetFolderPathW(None, CSIDL_PERSONAL, None, SHGFP_TYPE_CURRENT, buf)

print(buf.value)

如果用户更改了文档位置和/或默认保存位置,也可以使用。

相关问题 更多 >