Проблема с Configobj-python и элементами списка - PullRequest
0 голосов
/ 19 января 2019

Я пытаюсь прочитать .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 Ответ

0 голосов
/ 20 февраля 2019

Ваш вопрос состоит из двух частей.

  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'], который Python покорно объединяет вместе с пробелами, создавая

    h e l l o 1
    
...