2

我需要在一个文本文件中存储一个相对较大的可变实例变量列表。这是我当前阅读和写作方法的细分:

class Car():
    def __init__(self, name, size, color):
        self.name = name
        self.size = size
        self.color = color

aa = Car('truck','big','red')
bb = Car('sedan','small','blue')
cc = Car('bus','big','yellow')

with open('test.csv', 'ab') as ff:
    ww = csv.writer(ff)
    for i in [aa, bb, cc]:
        ww.writerow([i.name, i.size, i.color])

carList = []
with open('test.csv', 'rb') as ff:
    rr = csv.reader(ff)
    for i in rr:
        carList.append(Car(i[0], i[1], i[2]) )

print carList[1].color

这有几个问题。列的数量和顺序被有效地硬编码。我不确定这是否可以轻松避免,但我觉得应该可以。我相信,修改文件中间的一个实例需要遍历所有行并重写它们,同时检查'name'(与其他变量不同的是唯一的),以便以不同的方式写入。此外,在实例化之前,我不能直接按名称访问值,这也没什么大不了的,但我觉得我应该避免它。

该系统运行良好,但似乎可以大大改进。

4

2 回答 2

3

您可能会考虑使用数据库管理系统,如 postgresql 或 mysql。(甚至可能是一个花哨的新 noSql 数据库?)他们工作并普遍解决了如何处理大数据并仍然保持性能的问题......

如果您设计自己的格式,您最终可能会重新实现诸如索引(例如 btree)之类的东西以提高性能。

话虽这么说:对于您的简单示例,我会说 csv 是合适的。只需添加一个标题行(名称;大小;颜色),以便可以从标题中看到列的顺序。这解决了订单问题的硬编码......

于 2013-03-10T15:45:24.387 回答
2

我从未使用过它,但请查看pickle/cpickle。它可能更容易处理:

# Save a dictionary into a pickle file.
import pickle

favorite_color = { "lion": "yellow", "kitty": "red" }

pickle.dump( favorite_color, open( "save.p", "wb" ) )


#Load the dictionary back from the pickle file.

favorite_color = pickle.load( open( "save.p", "rb" ) )
# favorite_color is now { "lion": "yellow", "kitty": "red" }
于 2013-03-10T15:37:25.847 回答