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

これにはいくつかの問題があります。列の数と順序は効果的にハードコーディングされています。これを簡単に回避できるかどうかはわかりませんが、そうすべきだと思います。ファイルの途中でインスタンスを変更するには、すべての行を繰り返して書き直し、「名前」(他の変数とは異なり一意)をチェックして、行の書き込み方法を変える必要があると思います。また、インスタンス化するまで名前で値に直接アクセスすることはできません。これもそれほど大きな問題ではありませんが、避けたほうがいいと思います。

このシステムは十分に機能しますが、大幅に改善できるようです。

4

2 に答える 2

3

postgresqlやmysqlなどのデータベース管理システムの使用を検討するかもしれません。(そして、おそらく新しいnoSql dbでさえも?)彼らは機能し、一般的に、大きなデータを処理し、パフォーマンスを維持する方法の問題を解決しました...

独自の形式を考案すると、パフォーマンスを向上させるためにインデックス(btreeなど)などを再実装することになります。

つまり、簡単な例として、csvが適していると思います。ヘッダー行(name; size; color)を追加するだけで、ヘッダーから列の順序を確認できます。これにより、順序の問題のハードコーディングが解決されます...

于 2013-03-10T15:45:24.387 に答える
2

使ったことがないのですが、きゅうりのピクルスをチェックしてください。扱いやすいかもしれません:

# 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 に答える