私はすでに この質問 を見つけました。これはos.path.expanduser(path)
を使用してユーザーのホームディレクトリを取得することを提案しています。
「ダウンロード」フォルダでも同じようにしたいのですが。私は これはC#で可能です を知っていますが、Pythonは初めてですが、これも可能かどうかはわかりません。プラットフォームに依存しない(Windows 、Ubuntu)。
私はdownload_folder = os.path.expanduser("~")+"/Downloads/"
を実行できることを知っていますが、それでも (少なくともWindowsでは)デフォルトのダウンロードフォルダを変更することは可能です 。
Pythonでは、Windowsフォルダを正しく配置するのが面倒です。 this one などのMicrosoft開発テクノロジーに関する回答によれば、それらはVista Known Folder API を使用して取得する必要があります。このAPIは、Python標準ライブラリによってラップされていません(ただし 2008年からの問題 要求があります))が、ctypesモジュールを使用してそれにアクセスできます。
上記の回答をダウンロード用のフォルダーIDを使用するように変更 ここに表示 を既存のUnixコードと組み合わせると、次のようなコードになります。
import os
if os.name == 'nt':
import ctypes
from ctypes import windll, wintypes
from uuid import UUID
# ctypes GUID copied from MSDN sample code
class GUID(ctypes.Structure):
_fields_ = [
("Data1", wintypes.DWORD),
("Data2", wintypes.Word),
("Data3", wintypes.Word),
("Data4", wintypes.BYTE * 8)
]
def __init__(self, uuidstr):
uuid = UUID(uuidstr)
ctypes.Structure.__init__(self)
self.Data1, self.Data2, self.Data3, \
self.Data4[0], self.Data4[1], rest = uuid.fields
for i in range(2, 8):
self.Data4[i] = rest>>(8-i-1)*8 & 0xff
SHGetKnownFolderPath = windll.Shell32.SHGetKnownFolderPath
SHGetKnownFolderPath.argtypes = [
ctypes.POINTER(GUID), wintypes.DWORD,
wintypes.HANDLE, ctypes.POINTER(ctypes.c_wchar_p)
]
def _get_known_folder_path(uuidstr):
pathptr = ctypes.c_wchar_p()
guid = GUID(uuidstr)
if SHGetKnownFolderPath(ctypes.byref(guid), 0, 0, ctypes.byref(pathptr)):
raise ctypes.WinError()
return pathptr.value
FOLDERID_Download = '{374DE290-123F-4565-9164-39C4925E467B}'
def get_download_folder():
return _get_known_folder_path(FOLDERID_Download)
else:
def get_download_folder():
home = os.path.expanduser("~")
return os.path.join(home, "Downloads")
Python=から既知のフォルダを取得するためのより完全なモジュールは githubで利用可能 です。
このかなり単純なソリューション( this reddit postから拡張)は私のために働きました
import os
def get_download_path():
"""Returns the default downloads path for linux or windows"""
if os.name == 'nt':
import winreg
sub_key = r'SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders'
downloads_guid = '{374DE290-123F-4565-9164-39C4925E467B}'
with winreg.OpenKey(winreg.HKEY_CURRENT_USER, sub_key) as key:
location = winreg.QueryValueEx(key, downloads_guid)[0]
return location
else:
return os.path.join(os.path.expanduser('~'), 'downloads')
KNOWNFOLDERID
docs から取得できますPython3 + MacまたはLinuxの場合
from pathlib import Path
path_to_download_folder = str(os.path.join(Path.home(), "Downloads"))
import os
download_path='/'.join( os.getcwd().split('/')[:3] ) + '/Downloads'