- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我运行下面的代码时,我收到此错误消息“EOFError: Ran out of input”这是什么意思??怎么才能矫正??以及如何在屏幕上输出记录的详细信息。
import pickle # this library is required to create binary files
class CarRecord:
def __init__(self):
self.VehicleID = " "
self.Registration = " "
self.DateOfRegistration = " "
self.EngineSize = 0
self.PurchasePrice = 0.00
ThisCar = CarRecord()
Car = [ThisCar for i in range(2)] # list of 2 car records
Car[0].VehicleID = "CD333"
Car[0].Registration = "17888"
Car[0].DateOfRegistration = "18/2/2017"
Car[0].EngineSize = 2500
Car[0].PurchasePrice = 22000.00
Car[1].VehicleID = "AB123"
Car[1].Registration = "16988"
Car[1].DateOfRegistration = "19/2/2017"
Car[1].EngineSize = 2500
Car[1].PurchasePrice = 20000.00
CarFile = open ('Cars.TXT', 'wb' ) # open file for binary write
for j in range (2): # loop for each array element
pickle.dump (Car[j], CarFile) # write a whole record to the binary file
CarFile.close() # close file
CarFile = open ('Cars.TXT','rb') # open file for binary read
Car = [] # start with empty list
while True: #check for end of file
Car.append(pickle.load(CarFile)) # append record from file to end of list
CarFile.close()
最佳答案
简短回答:最简单的解决方案是使用 pickle.dump()
将完整列表写入文件。没有必要在循环中一个一个地写入所有对象。 Pickle 专为您设计。
示例代码和替代解决方案:
下面是一个完整的示例。一些注意事项:
__init__
函数,使初始化代码更简单、更短。__repr__
函数。这可用于将记录详细信息打印到屏幕上,这也是您要求的。 (请注意,您也可以实现 __str__
函数,但我选择在本示例中实现 __repr__
)。如果您真的想手动编写对象,无论出于何种原因,有一些替代方法可以安全地进行。我将在这个代码示例之后解释它们:
import pickle
class CarRecord:
def __init__(self, vehicle_id, registration, registration_date, engine_size, purchase_price):
self.vehicle_id = vehicle_id
self.registration = registration
self.registration_date = registration_date
self.engine_size = engine_size
self.purchase_price = purchase_price
def __repr__(self):
return "CarRecord(%r, %r, %r, %r, %r)" % (self.vehicle_id, self.registration,
self.registration_date, self.engine_size,
self.purchase_price)
def main():
cars = [
CarRecord("CD333", "17888", "18/2/2017", 2500, 22000.00),
CarRecord("AB123", "16988", "19/2/2017", 2500, 20000.00),
]
# Write cars to file.
with open('Cars.TXT', 'wb') as car_file:
pickle.dump(cars, car_file)
# Read cars from file.
with open('Cars.TXT', 'rb') as car_file:
cars = pickle.load(car_file)
# Print cars.
for car in cars:
print(car)
if __name__ == '__main__':
main()
输出:
CarRecord('CD333', '17888', '18/2/2017', 2500, 22000.0)
CarRecord('AB123', '16988', '19/2/2017', 2500, 20000.0)
您可以也可以循环执行,而不是立即转储列表。以下代码片段是“将汽车写入文件”和“从文件读取汽车”的替代实现。
备选方案 1:将对象数量写入文件
在文件的开头,写下汽车的数量。这可用于从文件中读取相同数量的汽车。
# Write cars to file.
with open('Cars.TXT', 'wb') as car_file:
pickle.dump(len(cars), car_file)
for car in cars:
pickle.dump(car, car_file)
# Read cars from file.
with open('Cars.TXT', 'rb') as car_file:
num_cars = pickle.load(car_file)
cars = [pickle.load(car_file) for _ in range(num_cars)]
备选方案 2:使用“结束”标记
在文件末尾,写入一些可识别的值,例如None
。读取此对象时可用于检测文件结尾。
# Write cars to file.
with open('Cars.TXT', 'wb') as car_file:
for car in cars:
pickle.dump(car, car_file)
pickle.dump(None, car_file)
# Read cars from file.
with open('Cars.TXT', 'rb') as car_file:
cars = []
while True:
car = pickle.load(car_file)
if car is None:
break
cars.append(car)
关于python - EOFError : Ran out of input 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42348213/
我有一个非常简单的 Python 代码,但不明白为什么循环不会停止。我特别想在函数内部使用辅助函数。有什么想法吗? def x(): a = range(0,5) def y(ran)
本文实例讲述了Python使用pickle模块报错EOFError Ran out of input的解决方法。分享给大家供大家参考,具体如下: 遇到了 EOFError:Ran out of i
Ran out of input 我在pytorch测试DataLoader时报错,代码: testloader = DataLoader(test, batch_size=16, shuffle=T
当我运行下面的代码时,我收到此错误消息“EOFError: Ran out of input”这是什么意思??怎么才能矫正??以及如何在屏幕上输出记录的详细信息。 import pickle # th
一切正常,直到: celery beat v3.1.18 (Cipater) is starting. __ - ... __ - _ Configuration ->
我已经使用Excel VBA开发了一个程序,该程序偶尔会导致“Excel Ran资源不足”错误。 关闭文件,重新打开并重新运行宏总是可以修复导致错误的任何问题。我知道首先避免错误是最佳实践,但我辞职认
描述: 我需要制作一个电子表格类型的计算器来跟踪在线游戏(ArcheAge)中的信息。该“电子表格”必须保存信息并以 5 分钟为增量自动更新一组值(最好将其作为文件保存到计算机上。这是我正在开发的一个
在为节日运行 C++ 代码时,我正在使用多种语言,如美国 diaphone、意大利语等。但是当播放一种语言后,我选择另一种语言,然后终端显示错误“SIOD:存储空间不足”,并且什么都不做。谁能帮帮我?
我运行 go test 并得到超时错误: *** Test killed with quit: ran too long (10m0s). FAIL call/httptest 600.05
我有一个 .obj文件中,以前我将图像转换为 base64 并使用 pickle 保存. 问题是当我尝试加载 .obj 时文件与 pickle ,将代码从base64转成图片,用pygame加载. 加
我们正在开发一个iOS应用。当我们在PC上测试该应用程序时,一切正常,但是当我们在iPad/iPhone4上运行该应用程序时,我们经常会收到“Ran out of Trampolines type 2
因此,我正在从事的项目之一要求我们获取服务器上运行的每个查询,并将该查询自动粘贴到数据库内的表中。这样做的原因是 DBA 能够查看之前在机器上运行的所有 SQL 查询。不幸的是,我没有任何余地以不同的
任何人都可以告诉我这个错误... 数据库有 40,000 条新闻报道,但只有“story”字段较大,'old' 是一个数值 0 或 1,'title' 和 'shortstory' 非常短或为 NUL
我正在制作一个 java 项目的框架; gradle 构建文件有一个烦人的问题:测试运行了两次,一次由任务“JUnitPlatformTest”运行,第二次由任务“test”运行。 第一个似乎触发了第
我正在为我正在设计的系统使用带有 mysql 数据库的 spring MVC。 当我尝试从 spring Controller 将对象传递到 html 页面时,遇到了标题中引用的错误。 我正在尝试做的
我无法对我的代码进行单元测试。 $_SESSION 每次运行下一个测试时都会清除。当我运行 testStartProductSession() 时,我的对象将一些数据添加到 $_SESSION 变量。
我正在运行 Tensor Flow 版本 0.7.1,支持 64 位 GPU,使用 pip 安装,并且在装有 Ubuntu 14.04 的 PC 上运行。我的问题是在构建网络时 Tensor Flow
我在尝试使用 Unpickler.load() 时遇到一个有趣的错误,这里是源代码: open(target, 'a').close() scores = {}; with open(target,
我通过 miniforge 安装了 conda:https://github.com/conda-forge/miniforge 我的环境一直正常工作,直到最近任何 conda 命令都会导致: Col
我看到这个错误被发布了很多,通常是由于文件在打开后没有正确关闭。但由于我使用的是集成的 torch.load() 函数,我不确定我能做些什么不同的事情。 首先是保存部分: torch.save
我是一名优秀的程序员,十分优秀!