在文本文件中存储Python实例属性的更好方法是什么?

时间:2013-03-10 15:29:44

标签: python file text csv

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

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(与其他变量不同),以便以不同的方式写入行。此外,我无法直接访问值,直到实例化后,这实际上并不是那么大,但我觉得我应该避免它。

这个系统效果很好,但似乎可以大大改进。

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分: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" }