Проблема с Configobj-python и элементами списка

Я пытаюсь читать .ini файл с ключевыми словами, содержащими отдельные элементы или элементы списка. Когда я пытаюсь напечатать строки одного элемента и значения с плавающей точкой, он печатает как h,e,l,l,o а также 2, ., 1 соответственно, тогда как это должно было быть просто hello а также 2.1, Кроме того, когда я пытаюсь написать новую строку одного элемента /float/integer, появляется , в конце. Я новичок в Python и имею дело с configobj, Любая помощь приветствуется, и если на этот вопрос уже был дан ответ, направьте меня к ней. Спасибо!

from configobj import ConfigObj

Читать

config = ConfigObj('para_file.ini')
para = config['Parameters']
print(", ".join(para['name']))
print(", ".join(para['type']))
print(", ".join(para['value']))

Написать

new_names = 'hello1'
para['name'] = [x.strip(' ') for x in new_names.split(",")]
new_types = '3.1'
para['type'] = [x.strip(' ') for x in new_types.split(",")]
new_values = '4'
para['value'] = [x.strip(' ') for x in new_values.split(",")]
config.write()

мой para_file.ini выглядит так,

[Parameters]

name = hello1
type = 2.1
value = 2

1 ответ

Решение

На ваш вопрос есть две части.

  1. Опции в ConfigObj могут быть либо строкой, либо списком строк.

    [Parameters]
      name = hello1             # This will be a string
      pets = Fluffy, Spot       # This will be a list with 2 items
      town = Bismark, ND        # This will also be a list of 2 items!!
      alt_town = "Bismark, ND"  # This will be a string
      opt1 = foo,               # This will be a list of 1 item (note the trailing comma)
    

    Итак, если вы хотите, чтобы что-то отображалось в виде списка в ConfigObj, вы должны убедиться, что оно содержит запятую. Список одного элемента должен иметь запятую.

  2. В Python строки являются итеративными. Таким образом, даже если они не являются списком, их можно повторять. Это означает, что в выражении, как

    print(", ".join(para['name']))
    

    Строка para['name'] будет повторяться, производя список ['h', 'e', 'l', 'l', 'o', '1'], который Питон покорно соединяет вместе с пробелами, создавая

    h e l l o 1
    
Другие вопросы по тегам