2009-09-15 3 views
0

На самом деле я застрял в своей работе. Я хочу импортировать txt-файл в мою программу python, которая должна иметь два списка intergers.Проблема configparser в python

Следующая программа работает нормально, но мне нужно импортировать список «a» и «b» с помощью configparser.

Это будет так приятно, если кто-нибудь поможет мне с этим!

Я начинающий на питоне, поэтому попробуйте ответить легким способом ...!

Программа выглядит следующим образом:

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

+0

дорогой я не могу запустить этот код? Я не привык к python, так что вы можете точно сказать мне, как мне выйти (из кода выше), что мне нужно? – Gillani

0

json module обеспечивает лучшую поддержку списков в файлах конфигурации. Вместо формата ConfigParser (без поддержки списка) попробуйте использовать для этой цели JSON.

JSON (Обозначение объекта JavaScript) - это облегченный формат обмена данными. Человеку легко читать и писать. Машины легко разбираются и генерируются. Он основан на подмножестве языка программирования JavaScript, стандартном ECMA-262 3rd Edition - декабрь 1999 года. 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

+0

Вы имеете в виду бит ConfigParser? сообщение и сообщение об ошибке или результаты. – gimel

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

дорогой Хенрик!Я пытался искупить код, который вы написали для меня, но я не смог его правильно разобрать? можете ли вы запустить его в модуле ur python и увидеть ошибки? – Gillani

+0

Работает для меня; вывод - это что-то вроде «Ran 2 test in 0.001s OK» –

Смежные вопросы