0

実際、私は自分の仕事で立ち往生しています。インターガーのリストが2つあるPythonプログラムにtxtファイルをインポートしたいと思います。

次のプログラムは正常に動作していますが、configparserを使用してリスト「a」と「b」をインポートする必要があります。

誰かがそれを手伝ってくれるなら、それはとても素晴らしいでしょう!

私はPythonの初心者なので、簡単な方法で答えてみてください...!

プログラムは次のとおりです。

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
4

3 に答える 3

0

ええ、構成パーサーはおそらく最良の選択ではありません...しかし、本当に必要な場合は、これを試してください:

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()
于 2009-09-15T11:09:39.790 に答える
0

ConfigParserはその仕事に最適なツールではないようです。次のような解析ロジックを自分で実装できます。

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)

または、ファイル内のリストを作成するために他のロジックを作成することもできます。それはあなたがあなたのファイルでそれを表現したい方法に依存します

于 2009-09-15T10:01:27.947 に答える
0

このjsonモジュールは、構成ファイル内のリストをより適切にサポートします。ConfigParser(リストサポートなし)形式の代わりに、JSONこの目的で使用してみてください。

JSON(JavaScript Object Notation)は、軽量のデータ交換形式です。人間は読み書きが簡単です。マシンが解析して生成するのは簡単です。これは、JavaScriptプログラミング言語のサブセットである標準ECMA-262第3版-1999年12月に基づいています。JSONは完全に言語に依存しないテキスト形式ですが、Cを含むCファミリーの言語のプログラマーに馴染みのある規則を使用しています。 、C ++、C#、Java、JavaScript、Perl、Python、その他多数。これらのプロパティはJSON、理想的なデータ交換言語になります。

あなたの質問は宿題のようなにおいがするので、醜いハックを提案します。str.split()およびを使用しfloat()て、構成ファイルからリストを解析します。ファイルに次のものx.confが含まれているとします。

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

あなたはそれを解析することができます:

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

(リストを囲む角かっこは構成ファイルから削除される可能性があり、[1:-1]ハッキングは不要になります)

于 2009-09-15T11:00:58.637 に答える