不确定如何将字典/列表写入文件Python3

时间:2017-05-16 14:48:02

标签: python

我正在尝试创建一个在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,我不确定我做错了什么。我也不确定我是否在创建带有颜色的新文件时做了正确的事情。

2 个答案:

答案 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)