30 python
我有这个小程序,它需要在"我的文档"文件夹中创建一个小的.txt文件.这是我的代码:
textfile=open('C:\Users\MYNAME\Documents','w')
lines=['stuff goes here']
textfile.writelines(lines)
textfile.close()
Run Code Online (Sandbox Code Playgroud)
问题是,如果其他人使用它,我该如何更改MYNAME他们的帐户名称?
Joe*_*Joe 38
使用os.path.expanduser(path),请参阅http://docs.python.org/library/os.path.html
例如 expanduser('~/filename')
根据文档,这适用于Unix和Windows.
编辑:由于Sven的评论而转发斜线.
axi*_*xil 15
这没有任何额外的库:
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)
Run Code Online (Sandbox Code Playgroud)
如果用户更改了文档位置和/或默认保存位置,也可以使用.
在Windows上,您可以使用类似于接受的问题答案中显示的内容:Python,获取当前登录用户的Windows特殊文件夹.
对于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>'
Run Code Online (Sandbox Code Playgroud)
更新:我刚刚阅读了一些内容,CSIDL_PERSONAL如果用户更改了Win7文档库中的默认保存文件夹,则表示不会返回正确的文件夹.这是指您可以在库的"属性"对话框中执行的操作:

选中标记表示路径被设置为默认保存位置.
我目前不知道SHLoadLibraryFromKnownFolder()通过PyWin32 调用函数的方法(目前还没有shell.SHLoadLibraryFromKnownFolder.但是应该可以使用ctypes模块来实现).
1最新版本的Python for Windows Extensions的安装程序目前可从以下网址获得:http: //sourceforge.net/projects/pywin32