2017-05-16 21 views
1

python3で5つのフィールドを使用する単純なデータベースを作成しようとしています。私は、データがすべて保存されている場所と、このデータを新しいファイルにコピーする場所という2つの異なる手順を(今の間は)作成したいと考えています。私はこれを行うための最善の方法は、辞書やリストを使用することだと思います。私はこれをしようとすると、私はエラーコードAttributeError: 'list' object attribute 'append' is read-onlyを取得Python3に辞書/リストを書き込む方法が分かりません

def createFile(allColours): 
    colours = open("colours","w") 
    colours.write(allColours) 

def data(): 
    allColours = []    
    allColours.append = ({"ID": "1", "Shade": "Black", "Red": "0", "Green": "0", "Blue":"0"}) 
    allColours.append = ({"ID": "2", "Shade": "White", "Red": "255", "Green": "255", "Blue":"255"}) 
    allColours.append = ({"ID": "3", "Shade": "Red", "Red": "255", "Green": "0", "Blue":"0"}) 
    allColours.append = ({"ID": "4", "Shade": "Green", "Red": "0", "Green": "255", "Blue":"0"}) 
    allColours.append = ({"ID": "5", "Shade": "Blue", "Red": "0", "Green": "0", "Blue":"255"}) 
    createFile(allColours) 

と私は私が間違ってやっているかわからないんだけど、次のように私のコードは、これまでのところです。私は、色を使って新しいファイルを作成するのに正しいことをしているかどうかについても不確実です。

+4

等号を削除します。それは 'allColours.append(...)'でなければなりません。 – msitt

+0

可能な重複http://stackoverflow.com/questions/33355678/python-list-object-attribute-append-is-read-only – Kyrol

+0

私の明らかな間違いのためにありがとう、まだロープを学ぼうとしています。 Msittはとても感謝しています! –

答えて

0

データを保存するための書式を選択する必要があります。ここにあなたのコードは、JSONを使用するように変更されます:

#!/usr/bin/env python3 

import json 


def createFile(allColours): 
    with open("colours.json", "w") as f: 
     f.write(json.dumps(allColours, indent=4)) 


def data(): 
    allColours = [] 
    allColours.append({"ID": "1", "Shade": "Black", "Red": "0", "Green": "0", "Blue":"0"}) 
    allColours.append({"ID": "2", "Shade": "White", "Red": "255", "Green": "255", "Blue":"255"}) 
    allColours.append({"ID": "3", "Shade": "Red", "Red": "255", "Green": "0", "Blue":"0"}) 
    allColours.append({"ID": "4", "Shade": "Green", "Red": "0", "Green": "255", "Blue":"0"}) 
    allColours.append({"ID": "5", "Shade": "Blue", "Red": "0", "Green": "0", "Blue":"255"}) 
    createFile(allColours) 


if __name__ == '__main__': 
    data() 

ここで維持することが少し簡単というあなたのdata関数を記述するための別の方法があります:

from collections import OrderedDict 


def data2(): 
    keys = ("ID", "Shade", "Red", "Green", "Blue") 
    values = (
     (1, "Black", 0, 0, 0), 
     (2, "White", 255, 255, 255), 
     (3, "Red", 255, 0, 0), 
     (4, "Green", 0, 255, 0), 
     (5, "Blue", 0, 0, 255), 
    ) 
    # An OrderedDict will preserve the key order in the json output 
    allColours = [OrderedDict(zip(keys, colour)) for colour in values] 
    createFile(allColours) 
1

Pythonのリストは、属性を持つクラスです。ここでappend属性はメソッドであり、その値を再割り当てしようとしています。あなたは代わりに関数を使うべきです。

あなたがそうのようなリストに追加することができますのpython 3では

my_list = [] 
#Using member function append 
my_list.append({"ID": 0}) 
# using [] operator 
my_list[len(my_list)] = {"ID": 0 } 

参照:ファイルの書き込みについてhttps://docs.python.org/3/tutorial/datastructures.html

、あなたがそれしばらく前にJSON usginあなたのオブジェクトをシリアル化する場合があります

fd = open("my_list.json","w") 
json.dump(my_list, fd) 
関連する問題