Das korrekte Auffinden von Windows-Ordnern ist in Python etwas mühsam. Laut Antworten auf Microsoft-Entwicklungstechnologien, wie this one, sollten sie mit dem Vista Known Folder API erhalten werden. Diese API wird nicht von der Python-Standardbibliothek umschlossen (obwohl es an issue from 2008 anfordert), aber man kann das ctypes-Modul verwenden, um trotzdem darauf zuzugreifen.
die obige Antwort Anpassung den Ordner-ID für Downloads shown here und kombiniert es mit Ihrem vorhandenen Unix-Code zu verwenden, sollte im Code führen, der wie folgt aussieht:
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")
Ein komplettes Modul für das Abrufen von bekannten Ordnern von Python ist available on github.
Mit ausreichend ctypes-foo könnten Sie [den Windows-spezifischen Code in dieser Antwort] (http://stackoverflow.com/a/7672816/1600898) an Python (mit ein Fallback auf 'os.expanduser (...)' auf Nicht-Windows-Plattformen). [Hier] (http://stackoverflow.com/a/29888752/1600898) ist ein Beispiel. Beachten Sie jedoch, dass ein "Downloads" -Verzeichnis kein plattformunabhängiges Konzept ist. Es ist durchaus möglich, auf Linux-Systeme zu stoßen, die nicht über ein solches System verfügen. Stellen Sie also sicher, dass Sie es erstellen, wenn es nicht existiert. – user4815162342
@ user4815162342: Okay, danke für den Hinweis mit einem "Downloads" Verzeichnis ist kein plattformunabhängiges Konzept.'! –