Ответ 1
Используйте os.path.expanduser(path)
, см. http://docs.python.org/library/os.path.html
например. expanduser('~/filename')
Это работает как в Unix, так и в Windows, согласно документам.
Изменить: косую черту из-за комментария Sven.
У меня есть эта небольшая программа, и ей нужно создать небольшой .txt файл в папке "Мои документы". Вот код, который у меня есть для этого:
textfile=open('C:\Users\MYNAME\Documents','w')
lines=['stuff goes here']
textfile.writelines(lines)
textfile.close()
Проблема в том, что если другие люди используют его, как мне изменить MYNAME
на имя своей учетной записи?
Используйте os.path.expanduser(path)
, см. http://docs.python.org/library/os.path.html
например. expanduser('~/filename')
Это работает как в Unix, так и в Windows, согласно документам.
Изменить: косую черту из-за комментария Sven.
Это работает без дополнительных libs:
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)
Также работает, если пользователь поменяет местоположение и/или местоположение сохранения по умолчанию.
В 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>'
Обновление: я просто прочитал что-то, в котором говорится, что CSIDL_PERSONAL
не вернет правильную папку, если пользователь изменил значение по умолчанию сохранить папку в библиотеке документов Win7. Это относится к тому, что вы можете сделать в диалоговом окне свойств библиотеки:
Флажок означает, что путь задан как место сохранения по умолчанию.
В настоящее время я не знаю, как вызвать функцию SHLoadLibraryFromKnownFolder()
через PyWin32 (там в настоящее время нет shell.SHLoadLibraryFromKnownFolder
. Однако это должно быть возможно с помощью модуля ctypes
.
1 Установщики для последних версий Python для Windows Extensions в настоящее время доступны из: http://sourceforge.net/projects/pywin32