2010-01-14 46 views

Trả lời

8

Tôi đã tìm thấy a slightly different way of doing it. Bằng cách này sẽ cung cấp cho bạn vị trí của các thư mục hệ thống khác nhau và sử dụng các từ thực sự thay vì CLSID.

import win32com.client 
objShell = win32com.client.Dispatch("WScript.Shell") 
allUserDocs = objShell.SpecialFolders("AllUsersDesktop") 
print allUserDocs 

thư mục có sẵn khác: AllUsersDesktop, AllUsersStartMenu, AllUsersPrograms, AllUsersStartup, Desktop, Favorites, Fonts, MyDocuments,, Nethood, Printhood, gần đây, SendTo, StartMenu, Startup & Templates

+0

Thư viện này có được ghi lại ở bất kỳ đâu không? Trang SourceForge chỉ là một mê cung của các quảng cáo biểu ngữ và các wiki rỗng. Tôi đang tìm thư mục Program Files (hoặc, ít nhất, đó là những gì nó được sử dụng để được gọi trong Windows ... may mắn là tôi đã không phải đối phó với Windows trong một thời gian rất dài). 'AllUsersPrograms' dường như trả về đường dẫn đến 'Programs' trong menu Start (điều này thật thú vị, vì tôi không chắc mình đã tìm thấy menu Start trong Windows Server 2012!) –

+0

@MIchael Scheper Tôi e là mình đã không chạm vào nó kể từ khi tôi hỏi câu hỏi này và SourceForge đã đi xuống dốc trầm trọng kể từ đó. Có thể thử kiểm tra 'objShell' và xem có phương pháp nào để xem tất cả các tên' SpecialFolder' không? –

+1

Cảm ơn. Những gì tôi đã tìm thấy cho đến nay là http://aspn.activestate.com/ASPN/docs/ActivePython/2.4/pywin32/com.html và, nói chung, http://aspn.activestate.com/ASPN/docs/ ActivePython/2.4/pywin32/win32_modules.html, và một nhận xét đọc 'Pywin32 bị ràng buộc chặt chẽ đến các cuộc gọi win32 mà về cơ bản bạn chỉ cần nhìn vào MSDN và sử dụng cú pháp trong Python, phần lớn.' Tôi chưa tự xác minh điều này, nhưng có lẽ điều này sẽ giúp đưa các nhà cung cấp khác đi đúng hướng. –

4

Để lấy thư mục "My Documents", bạn có thể sử dụng:

from win32com.shell import shell 
df = shell.SHGetDesktopFolder() 
pidl = df.ParseDisplayName(0, None, 
    "::{450d8fba-ad25-11d0-98a8-0800361b1103}")[1] 
mydocs = shell.SHGetPathFromIDList(pidl) 
print mydocs 

Từ here.

Tôi không chắc chắn câu thần chú tương đương là gì cho "Program Files", nhưng hy vọng đó là đủ để giúp bạn bắt đầu.

+0

Trong Python <3, yeah. Trong Python 3.1: >>> từ vỏ win32com.shell nhập khẩu Traceback (gần đây nhất gọi cuối cùng): File "", dòng 1, trong từ win32com.shell nhập khẩu vỏ ImportError: Không có mô-đun tên win32com. shell –

+2

Được cài đặt win32com chưa? Có các phiên bản có sẵn cho Python 3.1 (xem http://sourceforge.net/projects/pywin32/files/) –

+0

[Chỉnh sửa] hoạt động tốt, cảm ơn! –

5

Trong Windows 7 tôi có thể sử dụng các biến môi trường sau để truy cập các thư mục mà tôi cần:

>>> import os 
>>> os.environ['USERPROFILE'] 
'C:\\Users\\digginc' 
>>> os.environ['PROGRAMFILES'] 
'C:\\Program Files' 
+0

Tôi đang trên 7 tại thời điểm này và điều này hoạt động độc đáo. Bạn có biết mức độ đáng tin cậy của việc sử dụng nền tảng này không? Tài liệu này không giúp được gì nhiều. Cảm ơn. –

+0

Tôi không biết ông Chimp, xin lỗi. – cdiggins

0

Gọi API Windows để thực hiện việc này, từ Vista, là SHGetKnownFolderPath. Có một wrapper được cấp phép MIT (sử dụng ctypes, do đó không phụ thuộc vào pywin32) here.

>>> from knownpaths import * 
>>> get_path(FOLDERID.ProgramFilesX86) 
u'C:\\Program Files (x86)' 
Các vấn đề liên quan