查找用户的“我的文档”路径
我有一个小程序,它需要在用户的“我的文档”文件夹里创建一个小的 .txt 文件。下面是我为此写的代码:
textfile=open('C:\Users\MYNAME\Documents','w')
lines=['stuff goes here']
textfile.writelines(lines)
textfile.close()
问题是,如果其他人使用这个程序,我该怎么把 MYNAME
改成他们自己的账户名呢?
3 个回答
在Windows系统上,你可以使用类似于这个问题的被接受答案中展示的方法:Python,获取当前登录用户的Windows特殊文件夹。
如果你想获取我的文档
文件夹的路径,可以在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>'
更新:我刚刚看到一些内容,提到如果用户在Win7的文档库中更改了默认保存文件夹,CSIDL_PERSONAL
将不会返回正确的文件夹。这是指你可以在库的属性对话框中进行的操作:
勾选框表示该路径被设置为默认保存位置。
目前我不知道如何通过PyWin32调用SHLoadLibraryFromKnownFolder()
函数(现在没有shell.SHLoadLibraryFromKnownFolder
)。不过,使用ctypes
模块应该是可以做到的。
1最新版本的Python for Windows扩展的安装程序可以在这里找到: http://sourceforge.net/projects/pywin32
这个代码可以在没有额外库的情况下正常运行:
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)
如果用户更改了文档的位置或者默认保存的位置,这个代码也能正常工作。
使用 os.path.expanduser(path)
,具体可以查看这个链接:http://docs.python.org/library/os.path.html
比如说,你可以这样用: expanduser('~/filename')
根据文档,这个方法在Unix和Windows系统上都能用。
补充说明:因为Sven的评论,所以这里用了正斜杠。