- 实验过程中需要进行类列表式的数据结构存储,txt是常用的,比较方便且易于观察的存储格式
- 没找到好用的api实现该功能
- 我便自己写了一个小工具,放上博客来供使用
- 只限于int类型的元素使用
- 支持多层list嵌套
方法叙述
- w r i t e L i s t 2 t x t ( f i l e , d a t a ) writeList2txt(file,data) writeList2txt(file,data),将List写入txt文件,file为写入文件,data为list,写入的格式为
[[4], [3, 2, 5], [2, 1, 4]]
- r e a d L i s t F r o m S t r ( s t r ) readListFromStr(str) readListFromStr(str),输入一个字符串,自动转换成List返回,格式如上面写入方法存储的格式,用中括号$ [ 和 和 和,$进行列表和元素之间的分隔
效果
代码详情
'''
date: 21.12.23
author: pmy
func: 标准化的将list转换到txt中,主要用于int类型元素
可能含有多级列表,需要输入保证正确
version: v0
'''
def writeList2txt(file,data):
'''
将list写入txt
:param data:
:return:
'''
file.write(str(data))
def readListFromStr(str):
'''
str -> List
除去冗余的方法调用
:param str:
:return:
'''
res,pos = help(str,1)
return res
def help(str,startIndex):
'''
单行字符串的读取,形成list
:param str:
:return:
'''
str = str.replace(" ","") # 将所有空格删去
res = []
i = startIndex
pre = startIndex
while i <len(str):
if str[i] == '[':
# 将pre-i-2的字符都切片,切split
if i-2>=pre:
slice = str[pre:i-1].split(',')
for element in slice:
res.append(int(element))
# 递归调用 加入子list
child,pos = help(str,i+1)
res.append(child)
i = pos # i移动到pos位置,也就是递归的最后一个右括号
pre = pos + 2 # 右括号之后是, [ 有三个字符,所以要+2至少
elif str[i] == ']':
# 将前面的全部放入列表
if i-1>=pre:
slice = str[pre:i].split(',')
for element in slice:
res.append(int(element))
return res,i
i = i + 1
return res,i
if __name__=="__main__":
str = "[[4], [3, 2, 5], [2, [1,100002,3,4],1, 4]]"
list = readListFromStr(str)
print(list)
代码地址
https://github.com/huozuo/list2txtTools