[英]What is a better way to store Python instance attributes in a text file?
我需要在文本文件中存儲相對較大的可變實例變量列表。 這是我目前的讀寫方法的細分:
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
這有一些問題。 列的數量和順序已有效地進行了硬編碼。我不確定是否可以輕松避免這種情況,但我認為應該這樣做。 我認為,修改文件中間的實例將需要遍歷所有行並重寫它們,同時檢查“名稱”(與其他變量不同,它們是唯一的)以使行寫的方式不同。 另外,在實例化之后,我無法直接通過名稱訪問值,這雖然沒什么大不了的,但是我覺得應該避免使用它。
該系統運行良好,但似乎可以大大改進。
您可能會考慮使用數據庫管理系統,例如postgresql或mysql。 (甚至可能是新的noSql db嗎?)他們工作了,通常解決了如何處理大數據並仍保持性能的問題。
如果您設計自己的格式,則可能最終會重新實現索引(例如btree)之類的東西以提高性能。
話雖如此:對於您的簡單示例,我想說csv是合適的。 只需添加標題行(名稱;大小;顏色),即可從標題中看到列的順序。 這解決了硬編碼訂單問題...
我從未使用過它,但請查看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" }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.