Frage

Eigentlich bin ich in meiner Arbeit stecken. Ich mag eine txt-Datei in mein Python-Programm importieren, die zwei Listen von intergers haben sollten.

Das folgende Programm funktioniert gut, aber ich brauche die Liste ‚a‘ und ‚b‘ mit Hilfe von ConfigParser zu importieren.

Es wird so schön, wenn jemand mir dabei helfen!

Ich bin ein begineer in Python so versuchen Sie es auf einfache Art und Weise zu beantworten ...!

Das Programm ist wie folgt:

a=[5e6,6e6,7e6,8e6,8.5e6,9e6,9.5e6,10e6,11e6,12e6]

p=[0.0,0.001,0.002,0.003,0.004,0.005,0.006,0.007,0.008,0.009,0.01,0.015,0.05,0.1,0.15,0.2]

b=0

x=0

while b<=10:

    c=a[b]
    x=0

    print '\there is the outer loop\n',c


    while x<=15:

        k=p[x]

        print'here is the inner loop\n',k

        x=x+1

    b=b+1
War es hilfreich?

Lösung

Scheint, wie ConfigParser nicht das beste Werkzeug für den Job ist. Sie können die Analyse-Logik implementieren youself so etwas wie:

a, b = [], []
with open('myfile', 'r') as f:
    for num, line in enumerate(f.readlines()):
        if num >= 10: 
            b.push(line)
        else:
            a.push(line)

oder Sie können eine andere Logik bilden die Listen in Ihrer Datei devide. Es hängt davon ab, wie Sie wollen, dass es repräsentieren in Sie Datei

Andere Tipps

Ja, der Config-Parser ist wahrscheinlich nicht die beste Wahl ... aber wenn Sie wirklich wollen, versuchen Sie dies:

import unittest
from ConfigParser import SafeConfigParser
from cStringIO import StringIO

def _parse_float_list(string_value):
    return [float(v.strip()) for v in string_value.split(',')]

def _generate_float_list(float_values):
    return ','.join(str(value) for value in float_values)

def get_float_list(parser, section, option):
    string_value = parser.get(section, option)
    return _parse_float_list(string_value)

def set_float_list(parser, section, option, float_values):
    string_value = _generate_float_list(float_values)
    parser.set(section, option, string_value)

class TestConfigParser(unittest.TestCase):
    def setUp(self):
        self.a = [5e6,6e6,7e6,8e6,8.5e6,9e6,9.5e6,10e6,11e6,12e6]
        self.p = [0.0,0.001,0.002,0.003,0.004,0.005,0.006,0.007,0.008,0.009,0.01,0.015,0.05,0.1,0.15,0.2]

    def testRead(self):
        parser = SafeConfigParser()
        f = StringIO('''[values]
a:   5e6,   6e6,   7e6,   8e6,
   8.5e6,   9e6, 9.5e6,  10e6,
    11e6,  12e6
p: 0.0  , 0.001, 0.002,
   0.003, 0.004, 0.005,
   0.006, 0.007, 0.008,
   0.009, 0.01 , 0.015,
   0.05 , 0.1  , 0.15 ,
   0.2
''')
        parser.readfp(f)
        self.assertEquals(self.a, get_float_list(parser, 'values', 'a'))
        self.assertEquals(self.p, get_float_list(parser, 'values', 'p'))

    def testRoundTrip(self):
        parser = SafeConfigParser()
        parser.add_section('values')
        set_float_list(parser, 'values', 'a', self.a)
        set_float_list(parser, 'values', 'p', self.p)

        self.assertEquals(self.a, get_float_list(parser, 'values', 'a'))
        self.assertEquals(self.p, get_float_list(parser, 'values', 'p'))

if __name__ == '__main__':
    unittest.main()

Der json Modul bietet eine bessere Unterstützung für Listen in Konfigurationsdateien . Statt der ConfigParser (keine Liste Unterstützung) Format, versuchen Sie es mit JSON für diesen Zweck.

  

JSON (JavaScript Object Notation) ist ein leichtes Datenaustauschformat. Es ist einfach für Menschen zu lesen und zu schreiben. Es ist einfach für Maschinen zu analysieren und zu generieren. Es basiert auf einer Teilmenge der Programmiersprache JavaScript, Standard ECMA-262 3rd Edition - Dezember 1999 JSON ist ein Textformat, das vollständig sprachunabhängig ist, sondern verwendet die Konventionen, die für Programmierer der C-Familie von Sprachen vertraut sind, einschließlich C , C ++, C #, Java, JavaScript, Perl, Python und viele andere. Diese Eigenschaften machen JSON eine ideale Datenaustauschsprache.

Da Ihre Frage wie Hausaufgaben riecht, werde ich eine hässliche Hack vorschlagen. Verwenden Sie str.split() und float() eine Liste aus einer Konfigurationsdatei zu analysieren. Angenommen, die Datei x.conf enthält:

[sect1]
a=[5e6,6e6,7e6,8e6,8.5e6,9e6,9.5e6,10e6,11e6,12e6]

Sie können es analysieren mit:

>>> import ConfigParser
>>> cf=ConfigParser.ConfigParser()
>>> cf.read(['x.conf'])
['x.conf']
>>> [float(s) for s in cf.get('sect1','a')[1:-1].split(',')]
[5000000.0, 6000000.0, 7000000.0, 8000000.0, 8500000.0, 9000000.0, 9500000.0, 10000000.0, 11000000.0, 12000000.0]
>>> 

(Die Klammern um die Liste aus der Konfigurationsdatei gelöscht werden können, so dass der [1:-1] unnötig hackt)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top