如何把列表储存在文件中

当一个列表比较大时,想要把列表(或者其他类型)永久储存,或者用文件中转。那么怎么把列表储存在文件中呢?

本周我要运算一个很大的列表,该列表的处理又横跨多个模块,如果使用return传递,就太占内存了。

普通的文件只能存储str类型,需要把列表中的每一个元素转化成str,而且还要注意适时插入分隔符。比如我用‘ ’去分隔每一个元素。

list = [big list]
    for item in list:
        data_file.write('%s ' %item)
如果要储存多个列表,那么需要在列表中间插入‘\n’

 for ugraph in [ugraph_network, ugraph_ER]:
        nodes_random = random_order(ugraph)
        list = compute_resilience(ugraph, nodes_random)
        for item in list:
            data_file.write('%s ' %item)
        data_file.write('\n')
这样我们就储存了列表到文件中。列表的每个元素以‘ ’分隔,列表之间以‘\n’分隔。

读取的时候只需要先以'\n'分隔成两个列表,然后再把每个列表中元素转化成int(float)即可。

data_file = open('list.dat', 'r')
data_text = data_file.read()
data_lines = data_text.split('\n')
data_file.close()
list1 = lists[0].split(' ')
list1.pop(-1)
list2 = data_lines[1].split(' ')
list2.pop(-1)
这里需要注意的是data_lines的大小是3,因为最后有一个'\n'。每个列表的最后也有一个‘ ’,需要去掉。


可以体会到,这样储存列表的效率是很低的。需要把列表迭代一次,转化为字符串。读取的时候则要再反向做一次,而且需要反复测试,以免带入不必要的元素

更重要的是,如果列表中的元素有不能转化为字符串的元素的话,基本就无法进行这样的处理。

如果只是临时储存,那么pickle模块真是太方便了。

result = [list1,list2]
data_file = open('list.p', 'wb')
pickle.dump(result, data_file)
data_file.close()
因为pickle文件只能储存一个变量,我把两个列表储存在一个列表中,然后再把这个列表储存在pickle文件中。

读取的时候也很简单。

data_file = open('list.p', 'rb') 
lists = pickle.load(data_file)
list1 = lists[0]
list2 = lists[1]
这样就可以直接使用了。而且没有其他元素的干扰。


——————————————————

github主页:https://github.com/gt11799 

E-mail:gting405@163.com






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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值