2012-07-09 11 views
7

मैं एक कॉन्फ़िग फ़ाइल configParser का उपयोग कर सकते है।ConfigParser के साथ नई लाइनें?</p> <pre><code><br> [ section one ]<br> one = Y,Z,X <br><br> [EG 2]<br> ias = X,Y,Z<br> </code></pre> <p>मेरे कार्यक्रम ठीक पढ़ने और इन मूल्यों प्रसंस्करण काम करता है:

हालांकि कुछ अनुभाग काफी बड़े होने जा रहे हैं। मैं एक कॉन्फ़िग फ़ाइल है कि मूल्यों एक नई लाइन पर होना करने की अनुमति देगा की जरूरत है, इस तरह:

[EG SECTION]<br> 
EG=<br> 
item 1 <br> 
item 2 <br> 
item 3<br> 
etc... 

मेरी कोड में मैं एक साधारण समारोह है कि string.split() का उपयोग कर अब स्पष्ट रूप से मूल्यों की एक सीमांकक (या विभाजक) लगता है अल्पविराम पर सेट करें। मैंने \n से बचने की स्ट्रिंग का प्रयास किया है जो काम नहीं करता है।

क्या किसी को पता है कि यह पाइथन कॉन्फ़िगर पार्सर के साथ संभव है या नहीं?
http://docs.python.org/library/configparser.html

# We need to extract data from the config 
def getFromConfig(currentTeam, section, value, delimeter): 
    cp = ConfigParser.ConfigParser() 
    fileName = getFileName(currentTeam) 
    cp.read(fileName) 
    try: 
     returnedString = cp.get(section, value) 
    except: # The config file could be corrupted 
     print("Error reading " + fileName + " configuration file.") 
     sys.exit(1) #Stop us from crashing later 
    if delimeter != "": # We may not need to split 
     returnedList = returnedString.split(delimeter) 
    return returnedList 

मैं इस के लिए प्रयोग करेंगे:

taskStrings = list(getFromConfig(teamName, "Y","Z",",")) 

उत्तर

10

ConfigParser _read() विधि के docstring का कहना है:

निरंतरता एक एम्बेडेड न्यू लाइन तो प्रमुख खाली स्थान के प्रतिनिधित्व कर रहे हैं।

या वैकल्पिक रूप से (अजगर 3 में संस्करण कहते हैं के रूप में):

मान, कई पंक्तियों अवधि कर सकते हैं जब तक कि वे मूल्य की पहली पंक्ति की तुलना में गहरी इंडेंट कर रहे हैं।

यह सुविधा मूल्यों को विभाजित करने और उन्हें कई पंक्तियों में "जारी रखने" का माध्यम प्रदान करती है।

[EG SECTION]<br> 
EG=<br> 
    item 1<br> 
    item 2<br> 
    item 3<br> 

आप इस तरह कोड के साथ एक सूची में EG SECTION में EG का मूल्य पढ़ सकता है:

try: 
    import ConfigParser as configparser 
except ImportError: # Python 3 
    import configparser 

cp = configparser.ConfigParser() 
cp.read('test.ini') 

eg = cp.get('EG SECTION', 'EG') 
print(repr(eg)) # -> '\nitem 1\nitem 2\nitem 3' 

cleaned = [item for item in eg.strip().split('\n')] 
print(cleaned) # -> ['item 1', 'item 2', 'item 3'] 
+0

क्या घोंसले का कोई स्तर संभव है? जैसे, कहें कि मेरे पास एक इच्छित अनुभाग है जिसमें मूल्य में से एक फिर से उप-उद्देश्य है। यह फिर से एक मान है जो उप-इरादा है और आगे! – Nishant

+1

@ निशांत: मान लीजिए कि आपका मतलब "इंडेंट" है: सबसे पहले आप आसानी से सवाल का जवाब दे सकते हैं (कोशिश करके, अगर कुछ और नहीं)।हालांकि आपको परेशानी बचाने के लिए - इससे कोई फर्क नहीं पड़ता कि कितने आइटम इंडेंट हैं, सिर्फ वे हैं या नहीं। – martineau

+0

मेरा मतलब इंडेंट माफ करना था। मुझे यह हिस्सा मिला कि इसे किसी भी गहराई से इंडेंट किया जा सकता है, लेकिन मेरा मतलब यह है कि अगर उसमें * गहरी * इंडेंट सामग्री में अतिरिक्त आइटम है जो * गहराई से * इंडेंट आइटम है? घोंसले का सामान्य मामला मेरा मतलब है। मुझे इस मामले में तीसरा स्तर लगता है। मुझे उम्मीद है कि आप इसे प्राप्त करेंगे, अन्यथा यह ठीक है :-) मैं इसे आज़माउंगा और शायद एक और सवाल पोस्ट करूंगा! – Nishant

2

यह संभव है। मेरे अपने कॉन्फ़िग फ़ाइल में, उदाहरण के लिए, मैं tuples के साथ एक सूची वस्तु है:

[root] 
path:/
redirectlist: [ (r'^magic', '/file'), 
    (r'^avplay', '/file'), 
    (r'^IPTV', '/file'), 
    (r'^box', '/file'), 
    (r'^QAM', '/qam'), 
    (r'.*opentv.*', '/qam'), 
    (r'.+', '/file') ] 

और मुझे क्या करना:

redirectstr = _configdict.get('root', 'redirectlist') 
redirects = eval(redirectstr) 

टिप्पणी है कि मैं वास्तव में उस लाइन eval'ing कर रहा हूँ, सुरक्षा का कारण हो सकता है जो अगर जंगली में प्रयोग किया जाता है तो उल्लंघन।

+6

यह तुम कर सकते हो रहा है उदाहरण के लिए, तो तुम जो निहित 'test.ini' नाम के एक कॉन्फ़िग फ़ाइल था यह 'ast.literal_eval' के साथ' eval' को प्रतिस्थापित करके सुरक्षित रूप से सुरक्षित करता है, जब तक कि आप उपयोगकर्ता को ऐसे ऑब्जेक्ट्स को इनपुट करने की अनुमति नहीं दे रहे हैं जो साधारण पायथन ऑब्जेक्ट्स (शब्दकोश, स्ट्रिंग्स, सूचियां, टुपल्स, फ्लोट्स और इंटीग्रर्स) नहीं हैं। – mgilson

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