2009-09-15 37 views
0

其實我被困在我的工作中。我想導入一個txt文件到我的python程序中,該程序應該有兩個整數列表。python中的問題configparser

下面的程序工作正常,但我需要在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 

回答

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) 

或者你可以組成一些其他的邏輯去分配文件中的列表。這取決於你想要在你的文件中代表它的方式

+0

其實我已經問過我用這個工作Configparser。 我只需要從用戶採取兩個名單,即a = []和b = [],其他一切都在我的程序..... 任何想法? – Gillani 2009-09-15 10:10:39

+0

親愛的我無法運行這段代碼?我不習慣Python,所以你可以告訴我如何從(上面的代碼)出來我需要什麼? – Gillani 2009-09-22 16:56:42

0

json module爲配置文件中的列表提供了更好的支持。 而不是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]破解不必要的)

+0

親愛的這段代碼也沒有運行?我不知道它有什麼問題?你能再次幫助我嗎? – Gillani 2009-09-22 16:58:15

+0

你的意思是ConfigParser位?發佈輸入和錯誤消息或結果。 – gimel 2009-09-22 18:28:43

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

親愛的Henrik!我嘗試瞭解您爲我寫的代碼,但是我無法正確地找到它?你可以在你的python模塊中運行它並查看錯誤嗎? – Gillani 2009-09-22 16:57:35

+0

適合我;輸出類似於「在0.001秒內運行2次測試」 – 2009-09-22 20:08:07