J'ai déjà trouvé cette question qui suggère d'utiliser os.path.expanduser(path)
pour obtenir le répertoire personnel de l'utilisateur.
Je voudrais réaliser la même chose avec le dossier "Téléchargements". Je sais que c'est possible en C # , pourtant je suis nouveau à Python et je ne sais pas si c'est possible ici aussi, préférable indépendant de la plateforme (Windows , Ubuntu).
Je sais que je pourrais simplement faire download_folder = os.path.expanduser("~")+"/Downloads/"
, pourtant (au moins sous Windows) il est possible de changer le dossier de téléchargement par défaut .
La localisation correcte des dossiers Windows est en quelque sorte une corvée en Python. Selon les réponses couvrant les technologies de développement Microsoft, telles que celle-ci , elles doivent être obtenues à l'aide de Vista API de dossier conn . Cette API n'est pas enveloppée par la bibliothèque standard Python (bien qu'il y ait n problème de 2008 le demande)), mais on peut utiliser le module ctypes pour y accéder quand même.
L'adaptation de la réponse ci-dessus pour utiliser l'ID de dossier pour les téléchargements illustré ici et la combiner avec votre code Unix existant devrait donner un code qui ressemble à ceci:
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")
Un module plus complet pour récupérer les dossiers connus de Python est disponible sur github .
Cette solution assez simple (développée à partir de this reddit post) a fonctionné pour moi
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
docsPour python3 + mac ou 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'