我正在尝试创建一个在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)
当我尝试这个时,我收到错误代码AttributeError: 'list' object attribute 'append' is read-only
,我不确定我做错了什么。我也不确定我是否在创建带有颜色的新文件时做了正确的事情。
答案 0 :(得分: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
关于文件编写,您可能希望在它之前序列化对象usgin JSON:
fd = open("my_list.json","w")
json.dump(my_list, fd)
答案 1 :(得分: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)