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

时间:2011-06-03 13:18:33

标签: python

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

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

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

5 个答案:

答案 0 :(得分:33)

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

e.g。 expanduser('~/filename')

根据文档,这适用于Unix和Windows。

编辑:由于Sven的评论而转发斜杠。

答案 1 :(得分:12)

这没有任何额外的库:

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)

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

答案 2 :(得分:5)

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

对于My Documents文件夹路径,请在shellcon.CSIDL_PERSONAL函数调用中使用shell.SHGetFolderPath(),而不是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 Extensions的安装程序目前可从以下网址获得:http://sourceforge.net/projects/pywin32

答案 3 :(得分:2)

在 Linux(Ubuntu 18.04.5) 和 Window 7 上测试

import os
os.path.expanduser('~/Documents')

答案 4 :(得分:0)

您可以使用pywin32扩展名来访问Win32 API。使用Win32 API,您可以获得代表“我的文档”桌面项目的虚拟文件夹。

from win32com.shell import shell, shellcon
doc_folder = shell.SHGetFolderPath(0, shellcon.CSIDL_PERSONAL, None, 0)

在这里您可以找到CSIDL_PERSONAL的描述: https://docs.microsoft.com/en-us/windows/win32/shell/csidl