2016-03-16 2 views
0

Это класс я создалЭто читает EOFError: Кончились вход

import pickle 

class CarRecord: 
    def __init__(self): 
     self.VehicleID = "" 
     self.Registration = "" 
     self.DateOfRegistration = None 
     self.EngineSize = 0 
     self.PurchasePrice = 0.00 

ThisCar = CarRecord() 
Car = [ThisCar for i in range(5)] 
Car[0].EngineSize = 2400 
Car[1].EngineSize = 2300 
Car[2].EngineSize = 2200 
Car[3].EngineSize = 2100 
Car[4].EngineSize = 2000 

Я хочу, чтобы написать эти записи в двоичный файл

CarFile = open('Cars.DAT', 'wb') 
for i in range(5): 
    pickle.dump(Car[i], CarFile) 
print(Car) 

CarFile.close() 
CarFile = open('Cars.DAT', 'rb') 
Car = [] 

print("££££££££") 

и добавьте запись в он конец список

while True: 

и здесь я проверить конец файла

Car.append(pickle.load(CarFile)) 
CarFile.close() 
print(Car) 
+0

Car.append (pickle.load (CarFile)) CarFile.close() печать (Car) –

+0

, который находится под временем True: –

+1

Я не думаю, что вы должны называть 'pickle.dump' несколько раз на одном файловом объекте. Попробуйте взять все объекты, которые вы хотите сбросить, и поместить их в один список. Затем выгрузите этот список только один раз в файл. – Kevin

ответ

3

Попробуйте этот код, проблема с вашим кодом заключается в том, что вы выполняете какое-то время. Истина, которая приводит к EOF, вам нужно либо указать длину разметки, либо дескриптор для EOFError, как указано в редакции.

import pickle 

class CarRecord: 
    def __init__(self): 
     self.VehicleID = "" 
     self.Registration = "" 
     self.DateOfRegistration = None 
     self.EngineSize = 0 
     self.PurchasePrice = 0.00 

ThisCar = CarRecord() 
Car = [ThisCar for i in range(5)] 
Car[0].EngineSize = 2400 
Car[1].EngineSize = 2300 
Car[2].EngineSize = 2200 
Car[3].EngineSize = 2100 
Car[4].EngineSize = 2000 

CarFile = open('Cars.DAT', 'wb') 
for i in range(0,5): 
    pickle.dump(Car[i], CarFile) 
print(Car) 

CarFile.close() 
CarFile = open('Cars.DAT', 'rb') 
Car = [] 

print("here") 

for i in range(0,5): 
    Car.append(pickle.load(CarFile)) 

CarFile.close() 
print(Car) 

EDIT: - Я нашел лучший ответ, который не использует жестко заданные значения. Reading from a file using pickle and for loop in python

Я также отправлю ответ здесь. В основном он ловит EOFError и UnpicklingError, так что, когда заканчивается файл, он просто закрывается, и вы можете использовать его, как правило, как вы хотите

Car = [] 
CarFile = open('Cars.DAT', 'rb') 
while 1: 
    try: 
     Car.append(pickle.load(CarFile)) 
    except (EOFError, UnpicklingError): 
     break 
CarFile.close() 
Смежные вопросы