python实现 List规范写入txt & txt中规范读取List

  • 实验过程中需要进行类列表式的数据结构存储,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

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值