2012-03-18 25 views
15

के मान लेते हैं मैं निम्न फ़ाइल संरचना है:विशिष्ट पायथन मॉड्यूल में चर की सूची कैसे प्राप्त करें?

data.py

foo = [] 
bar = [] 
abc = "def" 

core.py

import data 
# do something here # 
# a = ... 
print a 
# ['foo', 'bar', 'abc'] 

मैं सभी चर डेटा में परिभाषित प्राप्त करने की आवश्यकता। पीई फ़ाइल। मैं उसे कैसे प्राप्त कर सकता हूं? मैं dir() का उपयोग कर सकता हूं, लेकिन यह मॉड्यूल के सभी गुणों को __name__ और अन्य सहित देता है।

+0

आपको ऐसा करने की आवश्यकता क्यों है? –

+3

मुझे लगता है कि डीआईआर() बिल्कुल ठीक है कि मैं इसे कैसे करूंगा; बस कुछ भी नहीं छोड़ें जो "एक चर नहीं" जैसा दिखता है: 'v [star) में v vstartswith (' __ ')]' – mattbornski

+4

नहीं [अपने चर नामों से डेटा रखें] (http: // nedbatchelder.com/blog/201112/keep_data_out_of_your_variable_names.html)। –

उत्तर

19
print [item for item in dir(adfix) if not item.startswith("__")] 

आमतौर पर ऐसा करने के लिए नुस्खा है, लेकिन यह सवाल भीख माँगता।

क्यों?

+3

काम नहीं करता है और क्यों नहीं? क्योंकि स्पष्ट रूप से स्पष्ट स्पष्ट है? –

+5

क्यों - उदा। एक मॉड्यूल में चर में त्रुटि कोड होते हैं (एक पायथन रैपर राउंड सी enums की कल्पना करें), उपयोगी त्रुटि रिपोर्टिंग के लिए सभी मानों और त्रुटि नामों को एक dict में जोड़ना। – danio

+3

परीक्षण डेटा को एक अलग मॉड्यूल में डालकर और उन्हें सभी को स्वचालित परीक्षण के लिए आयात करने के लिए आयात करना। तो परीक्षण करने के लिए एक नए डेटासेट के लिए, आप इसे केवल उस मॉड्यूल में डाल दें और परीक्षण ढांचा स्वचालित रूप से इसे उठाएगा। – kissgyorgy

-1

प्रयास करें:

for vars in dir(): 
if vars.startswith("var"): 
    print vars 
+0

जब मैंने इसका परीक्षण किया तो काम नहीं करता है। मुझे लगता है कि आप 'डीआईआर (डेटा)' करना चाहते थे, फिर भी यह –

4
#!/usr/local/bin/python 
# coding: utf-8 
__author__ = 'spouk' 

def get_book_variable_module_name(module_name): 
    module = globals().get(module_name, None) 
    book = {} 
    if module: 
     book = {key: value for key, value in module.__dict__.iteritems() if not (key.startswith('__') or key.startswith('_'))} 
    return book 

import config 

book = get_book_variable_module_name('config') 
for key, value in book.iteritems(): 
    print "{:<30}{:<100}".format(key, value) 

उदाहरण config

#!/usr/local/bin/python 
# coding: utf-8 
__author__ = 'spouk' 

import os 

_basedir = os.path.abspath(os.path.dirname(__file__)) 

# database section MYSQL section 
DBHOST = 'localhost' 
DBNAME = 'simple_domain' 
DBPORT = 3306 
DBUSER = 'root' 
DBPASS = 'root' 

# global section 
DEBUG = True 
HOSTNAME = 'simpledomain.com' 
HOST = '0.0.0.0' 
PORT = 3000 
ADMINS = frozenset(['[email protected]']) 
SECRET_KEY = 'dfg45DFcx4rty' 
CSRF_ENABLED = True 
CSRF_SESSION_KEY = "simplekey" 

परिणाम समारोह

/usr/local/bin/python2 /home/spouk/develop/python/2015/utils_2015/parse_config_py.py 
DBPORT      3306                         
os       <module 'os' from '/usr/local/lib/python2.7/os.pyc'>             
DBHOST      localhost                       
HOSTNAME      simpledomain.com                      
HOST       0.0.0.0                        
DBPASS      root                         
PORT       3000                         
ADMINS      frozenset(['[email protected]'])                  
CSRF_SESSION_KEY    simplekey                       
DEBUG       1                         
DBUSER      root                         
SECRET_KEY     dfg45DFcx4rty                      
CSRF_ENABLED     1                         
DBNAME      simple_domain                      

Process finished with exit code 0 

का आनंद लें, दोस्त। :)

संबंधित मुद्दे