繁体   English   中英

在python中将集合写入输出文件

[英]Writing a set to an output file in python

我通常将 json 用于列表,但它不适用于集合。 是否有类似的函数将集合写入输出文件 f? 像这样的东西,但对于集合:

f=open('kos.txt','w')
json.dump(list, f)
f.close()

json不是特定于 python 的格式。 它知道列表和字典,但不知道集合或元组。

但是如果你想保留一个纯 python 数据集,你可以使用字符串转换。

with open('kos.txt','w') as f:
   f.write(str({1,3,(3,5)}))  # set of numbers & a tuple

然后使用ast.literal_eval再次读取它

import ast
with open('kos.txt','r') as f:
   my_set = ast.literal_eval(f.read())

这也适用于集合列表,内部带有集合的嵌套列表......只要数据可以按字面计算并且没有集合为空literal_eval已知限制)。 所以基本上序列化(几乎)任何带有str python基本对象结构都可以用它来解析。

对于空集的情况,由于set()无法解析回来,因此需要应用一些麻烦。

import ast
with open('kos.txt','r') as f:
   ser = f.read()
my_set = set() if ser == str(set()) else ast.literal_eval(ser)

您也可以使用pickle模块,但它创建二进制数据,因此更加“不透明”,而且还有一种使用json如何 JSON 序列化集合? . 但是为了您的需要,我会坚持使用str/ast.literal_eval

如果我们在文件中写入空集,使用ast.literal_eval(f.read())将给出错误ValueError: malformed node or string ast.literal_eval(f.read()) ValueError: malformed node or string 我认为, pickle会更好用。

如果 set 为空,则不会出错。

import pickle

s = set()

##To save in file
with open('kos.txt','wb') as f:
   pickle.dump(s, f)

##To read it again from file
with open('kos.txt','rb') as f:
   my_set = pickle.load(f)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM