2010-10-20 12 views
6

कैसे होगा मैं सभीमूल्यों एक Windows रजिस्ट्री कुंजी की पायथन मॉड्यूल _winreg का उपयोग कर के माध्यम से लूप। मेरे पास कोड है जो मैं चाहता हूं, लेकिन यह निर्दिष्ट रजिस्ट्री कुंजी के उपकुंजियों के लिए है।लूप .. _winreg अजगर

from _winreg import * 
t = OpenKey(HKEY_CURRENT_USER, r"PATH TO KEY", 0, KEY_ALL_ACCESS) 

try: 
    i = 0 
    while True: 
     subkey = EnumValue(t, i) 
     print subkey 
     i += 1 
except WindowsError: 
    # WindowsError: [Errno 259] No more data is available  
    pass 

ओह, यह समझ से बाहर:


यहाँ कोड है। लेकिन, अगर कोई इसे करने का एक और तरीका जानता है, तो भी मैं उस जवाब को स्वीकार करूंगा!

उत्तर

4

EnumValue यहाँ मदद की नहीं होना चाहिए

# list all values for a key 
try: 
    count = 0 
    while 1: 
     name, value, type = _winreg.EnumValue(t, count) 
     print repr(name), 
     count = count + 1 
except WindowsError: 
    pass 
7

मैं करना पसंद करते हैं इसे में सही डाइविंग के बजाय त्रुटि से बचने के ...

उपयोग _winreg.QueryInfoKey मानों की संख्या प्राप्त करने के लिए:

import _winreg 
key = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER, r'PATH\TO\KEY', 0, _winreg.KEY_READ) 

for i in xrange(0, _winreg.QueryInfoKey(key)[1]): 
    print _winreg.EnumValue(key, i) 

कुंजी, समान विधि, मूल अनुक्रमणिका (मूल प्रश्न का दूसरा भाग) की संख्या प्राप्त करने के लिए:

for i in xrange(0, _winreg.QueryInfoKey(key)[0]): 
    print _winreg.EnumKey(key, i) 

नोट:importfrom ... import के बजाय उपयोग यह स्पष्ट जहां कार्य करता है और चर से आ रहे हैं बनाने के लिए। बाद में जीवन में कोड का पालन करना आसान बनाता है।

+2

xrange में '-1' अंतिम कुंजी को छोड़ देता है। मुझे लगता है कि यह सिर्फ xrange (_winreg.QueryInfoKey (कुंजी) [0] में 'होना चाहिए): ' –

0

रजिस्ट्री के कुंजियों और मूल्यों के माध्यम से पुनरावृत्त करने के लिए, आपकोविधि विधि से विधि की आवश्यकता होगी। ध्यान दें कि इन दो विधियों, सूचकांक को तर्क के रूप में लें, और आपको केवल दिए गए इंडेक्स के लिए कुंजी (या मान) प्रदान करेगा। इसलिए, सभी कुंजी (या मान) प्राप्त करने के लिए आपको एक से इंडेक्स को बढ़ाने की आवश्यकता है और WindowsError तक जारी नहीं है।

This post आपको इसकी विस्तृत समझ के लिए मदद कर सकता है। कोड के लिए गिथब लिंक पोस्ट में पाया जा सकता है।