簡體   English   中英

在文本文件中存儲Python實例屬性的更好方法是什么?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM