我正在研究一个小样本python文件。我有一个需要转换为pickle的csv文件。这是我到目前为止的代码。
import csv
import pickle
class primaryDetails:
def __init__(self, name, age, gender, contactDetails):
self.name = name
self.age = age
self.gender = gender
self.contactDetails = contactDetails
def __str__(self):
return "{} {} {} {}".format(self.name, self.age, self.gender, self.contactDetails)
def __iter__(self):
return iter([self.name, self.age, self.gender, self.contactDetails])
class contactDetails:
def __init__(self, cellNum, phNum, Location):
self.cellNum = cellNum
self.phNum = phNum
self.Location = Location
def __str__(self):
return "{} {} {}".format(self.cellNum, self.phNum, self.Location)
def __iter__(self):
return iter([self.cellNum, self.phNum, self.Location])
a_list = []
with open("t_file.csv", "r") as f:
reader = csv.reader(f)
for row in reader:
a = contactDetails(row[3], row[4], row[5])
a_list.append(primaryDetails(row[0], row[1], row[2] , a))
file = open('writepkl.pkl', 'wb')
# pickle.dump(a_list[0], primaryDetails)
pickle.dump(primaryDetails, a_list[0])
file.close()
csv文件
Bat,45,M,123456789,98764,Gotham
Sup,46,M,290345720,098484,Krypton
Wwomen,30,F,758478574,029383,Themyscira
Flash,27,M,3646348348,839484,Central City
Hulk,50,M,52903852398,298392,Ohio
当我读取文件并将其放入列表时,我无法挑选列表。我还尝试用a_list[0]
而不是列表来挑选它,它给了我错误 pickle.dump(primaryDetails,a_list [0])
TypeError:文件必须有'写'属性即可。我需要将数据放在一个列表中并对其进行pickle,以便将其保存到db as mentioned here。有人可以帮我弄清楚我做错了什么。
答案 0 :(得分:2)
您已将参数的顺序混为pickle.dump()
with open('writepkl.pkl', 'wb') as output_file:
pickle.dump(a_list, output_file)
可以在https://docs.python.org找到pickle和所有其他标准库模块的文档。
<强>
pickle.dump(obj, file, protocol=None, *, fix_imports=True)
强>将obj的pickled表示写入打开的文件对象文件。 这相当于Pickler(文件,协议).dump(obj)。
[...]
file参数必须具有接受单个的write()方法 bytes参数。因此,它可以是为二进制文件打开的磁盘文件 写入,io.BytesIO实例或任何其他自定义对象 这个界面。
答案 1 :(得分:1)
Pickle.dump()需要一个文件流对象和您要写入文件的对象
file = open("file.pkl",'wb')
pickle.dump(a_list[0], file)