2013-05-06 10 views
5

मैं दिन सर्वर का उद्धरण बना रहा हूं। मैं एक INI फ़ाइल, जिसका पाठ से विकल्पों पढ़ रहा हूँ नीचे है:पायथन - कॉन्फ़िगर पार्सर - विशेषता त्रुटि: कॉन्फ़िगर पार्सर उदाहरण में कोई विशेषता नहीं है '__getitem__'

[Server] 
host = 
port = 17 

[Quotes] 
file=quotes.txt 

हालांकि, जब मैं ConfigParser उपयोग करें, यह मुझे इस त्रुटि देता है:

#!/usr/bin/python 

from socket import * 
from ConfigParser import * 
import sys 

class serverConf: 
    port = 17 
    host = "" 
    quotefile = "" 

def initConfig(filename): 


    config = ConfigParser() 

    config['Server'] = {'port': '17', 'host': ''} 
    config['Quotes'] = {'file': 'quotes.txt'} 

    with open(filename, 'w') as configfile: 
     config.write(configfile) 


def parseConfig(filename): 

    configOptions = serverConf() 



    config = ConfigParser() 
    config.read(filename) 

    server = config['Server'] 

    configOptions.port = int(server['port']) 
    configOptions.host = conifg['Server']['host'] 
    configOptions.quoteFile = config['Quotes']['file'] 



    print "[Info] Read configuration options" 

    return configOptions 

def doInitMessage(): 

    print "Quote Of The Day Server" 
    print "-----------------------" 
    print "Version 1.0 By Ian Duncan" 
    print "" 

def Start(): 

    filename = "qotdconf.ini" 
    configOptions = parseConfig(filename) 

    print "[Info] Will start server at: " + configOptions.host + ":" + configOptions.port 

Start() 
:

Traceback (most recent call last): 
    File "server.py", line 59, in <module> 
    Start() 
    File "server.py", line 55, in Start 
    configOptions = parseConfig(filename) 
    File "server.py", line 33, in parseConfig 
    server = config['Server'] 
AttributeError: ConfigParser instance has no attribute '__getitem__' 

यहाँ मेरी कोड है

मुझे यह त्रुटि क्यों मिल रही है, और मैं इसे ठीक करने के लिए क्या कर सकता हूं?

+1

ब्रैकेट काम नहीं करेंगे। 'Get()' फ़ंक्शन का उपयोग करें। 'configOptions.host = conifg.get ('सर्वर', 'होस्ट')' http://docs.python.org/2/library/configparser.html#examples – M456

+0

ठीक है, आप उपयोग करने का प्रयास कर रहे हैं 'config' जैसे कि यह एक शब्दकोश था, और ऐसा नहीं है, यह एक' ConfigParser' उदाहरण है ... – kindall

+0

भविष्य में, आप ['ConfigParser' दस्तावेज़] (http://docs.python.org) को संदर्भित करना चाहेंगे /2/library/configparser.html#configparser-objects)। –

उत्तर

10

एक त्वरित करने के बाद पढ़ा ऐसा लगता है आप के रूप में अगर यह एक शब्दकोश है डेटा पढ़ने की कोशिश कर रहे हैं, जब आप का उपयोग करना चाहिए: config.get(section, data)

ईजी:

... 
config = ConfigParser() 
config.read(filename) 
... 
configOptions.port = config.getint('Server', 'port') 
configOptions.host = config.get('Server', 'host') 
configOptions.quoteFile = config.get('Quotes', 'file') 

config- को लिखने के लिए आप की तरह कुछ कर सकता है फ़ाइल:

... 
def setValue(parser, sect, index, value): 
    cfgfile = open(filename, 'w') 
    parser.set(sect, index, value) 
    parser.write(cfgfile) 
    cfgfile.close() 
+0

में काम करेगा, मैंने कुछ वेबसाइट गलत पर मार्गदर्शिका पढ़नी होगी, क्योंकि मैंने सोचा था कि यह कोण ब्रैकेट का उपयोग करने के लिए कहा जाता है। – Igor

+0

आप पाइथन दस्तावेज़ों का उपयोग कर सकते हैं: http://docs.python.org/2/library/configparser.html – JHolta

+12

यह कॉन्फ़िगरर्स के पायथन 3 संस्करण और configparser के pyhton 2.7 संस्करण के बीच अंतर है। पायथन 3.3 में, यह वही है जो आप सामान्य रूप से करेंगे। – chiffa

1

शामिल ConfigParser अजगर 2.7 के साथ इस फैशन में काम नहीं करता। हालांकि, आप पिछली पोर्ट configparser मॉड्यूल available on PyPy का उपयोग करके प्रस्तावित किए गए सटीक रूप से प्राप्त कर सकते हैं।

pip install configparser 

तो फिर तुम बस के रूप में उपयोग कर सकते हैं क्या तुम करोगी अजगर 3 में *

from configparser import ConfigParser 
parser = ConfigParser() 
parser.read("settings.ini") 
# or parser.read_file(open("settings.ini")) 
parser['Server']['port'] 
# '17' 
parser.getint('Server', 'port') 
# 17 

नोट

  • configparser 100% अजगर 3 संस्करण के साथ संगत नहीं है।
  • बैकपोर्ट का उद्देश्य पायथन 3.2+ में वेनिला रिलीज के साथ 100% संगतता रखना है।
  • उपरोक्त प्रदर्शित इस फैशन में इसका उपयोग करना, उपलब्ध होने पर पाइथन 3 कार्यान्वयन के लिए डिफ़ॉल्ट होगा।
संबंधित मुद्दे