Pol*_*Dot 5 python file set output
我通常将 json 用于列表,但它不适用于集合。是否有类似的函数将集合写入输出文件 f?像这样的东西,但对于集合:
f=open('kos.txt','w')
json.dump(list, f)
f.close()
Run Code Online (Sandbox Code Playgroud)
如果我们在文件中写入空集,则使用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)
Run Code Online (Sandbox Code Playgroud)
json不是特定于 python 的格式。它知道列表和字典,但不知道集合或元组。
但是如果你想保留一个纯 python 数据集,你可以使用字符串转换。
with open('kos.txt','w') as f:
f.write(str({1,3,(3,5)})) # set of numbers & a tuple
Run Code Online (Sandbox Code Playgroud)
然后使用 ast.literal_eval
import ast
with open('kos.txt','r') as f:
my_set = ast.literal_eval(f.read())
Run Code Online (Sandbox Code Playgroud)
这也适用于组列表,其中集嵌套列表内...只要数据可以被从字面上评价,没有集是空的(一个已知的限制的literal_eval)。所以基本上序列化(几乎)任何python基本对象结构str都可以用它来解析。
对于空集情况,由于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)
Run Code Online (Sandbox Code Playgroud)
您也可以使用该pickle模块,但它会创建二进制数据,因此更加“不透明”,并且还有一种使用方法json:如何 JSON 序列化集合?. 但为了你的需要,我会坚持str/ast.literal_eval