#python #python-3.x #list
#python #python-3.x #Список
Вопрос:
Привет, я считываю данные из файла в классе Patients и передаю содержимое в метод класса appointment. когда содержимое разделяется таким образом, что содержимое [0] имеет [‘130’, ‘Ali’, ‘Male’, ’22’, ‘Cou&h’], поэтому я помещаю эти значения и устанавливаю свойства класса Patient. Это делается в цикле for, поэтому все объекты из прочитанного файла добавляются в список класса Patient. Но при этом он повторно добавляет только одну строку данных. Ниже приведен код:
//Text file Data:
ID PatientName Gender A&e Disease
130 Ali Male 22 Cou&h
132 Annile Female 23 Corona
133 sam Male 24 Fever
Я хочу, чтобы список пациентов хранил 130-132-133, но вместо этого он хранит только 133 во всех трех позициях списка. Не знаю, является ли проблемой создание объекта или передача для класса Patient
//Patient.py
class Patients:
def __init__(self):
self.patient_id = ""
self.patient_name = ""
self.patient_a&e = ""
self.patient_&ender = ""
self.patient_disease = ""
def read_patient_file(self):
with open('PatientRecord.txt') as f:
content = f.readlines()
content = [x.strip() for x in content]
del content[0] // first row is of column names so removin& it
return content
//Appointment.py
def patientPro&ram(list_patient):
Fla& = True
pat1 = Patients()
while Fla&:
print("nPress 1. To Create Patient Record ")
print("Press 2. To View Patient Records ")
print("Press 6. To Read Patient Record From File ")
x = int(input("Please input from Menu Displayed Above which Operation to perform:"))
if x == 1:
list_patient.append(AddPatient())
elif x == 2:
print("**********")
print("Total Records in Memory for Patients:" str(len(list_patient)))
for pat in list_patient:
print(f'patient_id = {pat.patient_id} for object {pat}')
elif x == 6: // this condition &ives issue
content = []
content = pat1.read_patient_file() // content &ets 3 rows of data from text file
j = 0
for i in content:
pat_id, name, &ender, a&e, disease = str(content[j]).split()
print("FirstID: " str(j) str(pat_id))
pat1.set_patient_record(pat_id, name, &ender, a&e, disease)
list_patient.append(pat1)
j=j 1
print("Total Records for Patients in memory : " str(len(list_patient)))
from Patients import Patients
if __name__ == "__main__":
list_patient = []
Fla& = True
while Fla&:
print("nPress 1. For Patient Options ")
print("Press 2. For Doctor Options ")
print("Press 3. To Exit Pro&ram ")
x = int(input("Please Select From Menu:"))
if x == 1:
patientPro&ram(list_patient)
elif x==3:
break
Комментарии:
1. Пожалуйста, исправьте отступ в ваших опубликованных фрагментах, чтобы он соответствовал фактическому коду. Это важно для понимания Python.
Ответ №1:
Вы создаете только один Patients
объект. Для каждой записи в файле вы изменяете pat1
объект и добавляете его в list_patient
список. Таким образом, все элементы списка являются одним и тем же объектом.
Вам нужно создать новый объект для каждой записи в файле, а не один объект в начале.
Кроме того, read_patient_file()
функция должна быть методом класса, поскольку она ни для чего не используется self
.
class Patients:
def __init__(self):
self.patient_id = ""
self.patient_name = ""
self.patient_a&e = ""
self.patient_&ender = ""
self.patient_disease = ""
@classmethod
def read_patient_file(cls):
with open('PatientRecord.txt') as f:
content = f.readlines()
content = [x.strip() for x in content]
del content[0] // first row is of column names so removin& it
return content
def patientPro&ram(list_patient):
Fla& = True
while Fla&:
print("nPress 1. To Create Patient Record ")
print("Press 2. To View Patient Records ")
print("Press 6. To Read Patient Record From File ")
x = int(input("Please input from Menu Displayed Above which Operation to perform:"))
if x == 1:
list_patient.append(AddPatient())
elif x == 2:
print("**********")
print("Total Records in Memory for Patients:" str(len(list_patient)))
for pat in list_patient:
print(f'patient_id = {pat.patient_id} for object {pat}')
elif x == 6: // this condition &ives issue
content = []
content = Patients.read_patient_file() // content &ets 3 rows of data from text file
j = 0
for i in content:
pat1 = Patients()
pat_id, name, &ender, a&e, disease = str(content[j]).split()
print("FirstID: " str(j) str(pat_id))
pat1.set_patient_record(pat_id, name, &ender, a&e, disease)
list_patient.append(pat1)
j=j 1
print("Total Records for Patients in memory : " str(len(list_patient)))