эффективный способ чтения атрибутов файла в python

#python #file #class

Вопрос:

У меня есть класс, в котором я читаю файл, имеющий такие атрибуты, как ширина и высота в формате

 width 50
height 60
 

я хочу прочитать файл таким образом, чтобы создавать экземпляры по мере чтения файла, например, self.width = 50 и self.height = 60.Однако я не могу найти эффективный способ сделать это, какие-либо решения?

это мой текущий код на данный момент

 f = open(filename, "r")
width = f.readline().split()
self.width = width[1]
 

Комментарии:

1. Есть ли один экземпляр на файл? Несколько экземпляров? Как вы расстаетесь?

2. Есть ли неэффективный способ, которым вы делаете это сейчас? У вас есть файл с парой строк. Вы читаете их строка за строкой, разделяете, чтобы найти имя свойства и значения. Это кажется довольно прямолинейным. Почтовый индекс у вас есть, и мы можем с ним работать.

3. я хочу создать несколько экземпляров из одного файла

4. @tdelaney я только что разместил свой код в посте

5. В примере width это список (результат разделения), и вы не можете его назначить self.width . list реализован в C, поскольку dos не допускает произвольного присвоения атрибутов. У вас есть класс, у которого есть width атрибут?

Ответ №1:

 # You can have it all on 1 line, or instances on each, i.e.
# width 50
# height 60
# or
# # This is the one this solution handles
# width 50 height 60
# width 20 height 10

results = []

f = open(filename, "r")
lineString = f.readline()

while lineString != None:
    line = lineString.split()
    values = {}
    for i in range(0, len(line), 2):
        values[line[i]] = int(line[i   1]) # Integer, primarily for your case
    results.append(values)
    lineString = f.readline()

print(values)
 

То, что это делает, — это считывание каждого значения в строке, первое-это имя, а второе-значение (третье, четвертое и т. Д.).

Вы можете изменить код таким образом, чтобы он объединял все строки вместе, используя results[i].update(results[i 1]) итерацию.