#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])
итерацию.