如何将多个列表写入一个文本文件,其中每个列表都写入一个新行?

How to write multiple lists into a text file where each list is written into a new line?

我有两个 python 列表:

a_list = [1, 2, 3]
b_list = [4, 5, 6]

我怎样才能做到以下几点:

创建新文本文件 ---> 将列表转换为 json 字符串 ---> 将列表写入文件(每个列表在文件中应该有自己的行) ---> 打开文件---> 将每一行读入一个新变量并将 json 字符串转换回 python 列表?

我卡在这里了:

import json

a_list = [1, 2, 3]
b_list = [4, 5, 6]

with open('test.txt', 'w') as f:
    f.write(json.dumps(a_list))
    f.write(json.dumps(b_list))

(json字符串写在同一行。)

谢谢

使用JSON

首先你应该将这些列表放入字典中

d = {
    "a" : a_list,
    "b" : b_list
}

然后你可以把它转储到.json文件

json.dump(d,open("file.json","w"))

到read/load的文件,可以使用

d = json.load(open("file.json","r"))

这将 return 原始字典。即,

{'a': [1, 2, 3], 'b': [4, 5, 6]}

使用 Pickle

倾销

pickle.dump(a_list,open("b.ls","wb"))
pickle.dump(b_list,open("a.ls","wb"))

加载中

pickle.load(open("a.ls","rb"))
pickle.load(open("b.ls","rb"))

仅供参考:我以前从未使用过 pickle :)

比较json

  • pickle 协议和 JSON(JavaScript 对象表示法):

  • JSON是一种文本序列化格式(输出unicode文本, 尽管大多数时候它会被编码为 utf-8),而 pickle 是二进制序列化格式;

  • JSON 是 human-readable,而 pickle 不是;

  • JSON 可互操作并在 Python 之外广泛使用 生态系统,而 pickle 是 Python-specific;

  • JSON,默认情况下,只能表示Pythonbuilt-in的一个子集 类型,没有自定义 类;泡菜可以代表一个非常大的 Python 类型的数量(其中许多是自动的,通过巧妙的使用 Python 的内省设施;复杂的情况可以通过 实现特定对象 API);

  • 与 pickle 不同,反序列化不受信任 JSON 本身不会创建 任意代码执行漏洞。

source (python docs)

tldr

  • pickle 变小了
  • json 更快
  • json 是人类可读的(pickle 文件例如:�]q)
  • json 更安全(在这种情况下不相关)