Domanda

In realtà sono bloccato nel mio lavoro. Voglio importare un file txt nel mio programma Python che dovrebbe avere due elenchi di interger.

Il seguente programma funziona bene ma devo importare la lista 'a' e 'b' con l'aiuto di configparser.

Sarebbe così bello se qualcuno mi aiutasse!

Sono un principiante in Python, quindi per favore prova a rispondere in modo semplice ...!

Il programma è il seguente:

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
È stato utile?

Soluzione

Sembra che ConfigParser non sia lo strumento migliore per il lavoro. Puoi implementare te stesso la logica di analisi come:

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)

oppure puoi creare qualche altra logica per dividere gli elenchi nel tuo file. Dipende dal modo in cui vuoi rappresentarlo nel tuo file

Altri suggerimenti

Sì, probabilmente il parser di configurazione non è la scelta migliore ... ma se vuoi davvero, prova questo:

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()

Il json module fornisce migliore supporto per gli elenchi nei file di configurazione. Invece del formato ConfigParser (nessun supporto elenco), prova a utilizzare JSON per questo scopo.

  

JSON (JavaScript Object Notation) è un formato di scambio dati leggero. È facile per gli umani leggere e scrivere. È facile per le macchine analizzare e generare. Si basa su un sottoinsieme di JavaScript Programming Language, Standard ECMA-262 3a Edizione - Dicembre 1999. JSON è un formato di testo completamente indipendente dal linguaggio ma che utilizza convenzioni familiari ai programmatori della famiglia di linguaggi C, tra cui C , C ++, C #, Java, JavaScript, Perl, Python e molti altri. Queste proprietà rendono JSON una lingua di scambio dati ideale.

Dato che la tua domanda puzza di compiti a casa, suggerirò un brutto trucco. Usa str.split () e float () per analizzare un elenco da un file di configurazione. Supponiamo che il file x.conf contenga:

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

Puoi analizzarlo con:

>>> 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]
>>> 

(Le parentesi intorno all'elenco potrebbero essere eliminate dal file di configurazione, rendendo superfluo il [1: -1] hacking)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top