विंडोज फ़ोल्डरों का सही ढंग से पता लगाने के लिए कुछ हद तक पायथन में एक कोर है। माइक्रोसॉफ्ट डेवलपमेंट टेक्नोलॉजीज जैसे this one को कवर करने वाले उत्तरों के मुताबिक, उन्हें Vista Known Folder API का उपयोग करके प्राप्त किया जाना चाहिए। यह एपीआई पायथन मानक लाइब्रेरी द्वारा लपेटा नहीं गया है (हालांकि an issue from 2008 अनुरोध कर रहा है), लेकिन कोई भी इसे एक्सेस करने के लिए ctypes मॉड्यूल का उपयोग कर सकता है।
ऊपर जवाब अनुकूल डाउनलोड shown here के लिए फ़ोल्डर आईडी का उपयोग करने के लिए और अपने मौजूदा यूनिक्स कोड के साथ संयोजित कोड है कि इस तरह दिखता है में परिणाम चाहिए:
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")
अजगर से ज्ञात फ़ोल्डरों वापस लाने के लिए एक और पूरी मॉड्यूल available on github है।
पर्याप्त ctypes-foo के साथ आप [इस उत्तर में विंडोज-विशिष्ट कोड] (http://stackoverflow.com/a/7672816/1600898) को पाइथन (अनुकूलित कर सकते हैं) के साथ गैर-विंडोज प्लेटफ़ॉर्म पर 'os.expanduser (...)' पर फ़ॉलबैक)। [यहां] (http://stackoverflow.com/a/29888752/1600898) एक उदाहरण है। नोट, हालांकि, एक "डाउनलोड" निर्देशिका एक मंच-स्वतंत्र अवधारणा नहीं है। लिनक्स सिस्टम का सामना करना संभव है, जिसमें एक नहीं है, इसलिए यह सुनिश्चित करना सुनिश्चित करें कि यह अस्तित्व में नहीं है। – user4815162342
@ user4815162342: ठीक है, 'ए "डाउनलोड" निर्देशिका के साथ सलाह के लिए धन्यवाद एक मंच-स्वतंत्र अवधारणा नहीं है। –