我有这个小程序,它需要在他们的“我的文档”中创建一个小的.txt文件。夹。这是我的代码:
textfile=open('C:\Users\MYNAME\Documents','w')
lines=['stuff goes here']
textfile.writelines(lines)
textfile.close()
问题是,如果其他人使用它,如何将MYNAME
更改为其帐户名称?
答案 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
将无法返回正确的文件夹。这是指您可以在库的“属性”对话框中执行的操作:
选中标记表示路径被设置为默认保存位置。
我目前不知道通过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