把字典文本转化为字典

     一、问题与目标:

      字典文本保存在txt文件中:

      内容为:

           目标就是将其转化为字典,方便提取其中的网址。

二、方法

       1.读取字典文本文件,并进行规范处理。即只含有字典文本部分,把空白、换行号、逗号等全部去掉。

      代码:

      

f = open(r'C:\Users\Lenovo\Desktop\字典文本文件.txt','r',encoding='utf-8')
a =  f.readlines()
b = []
for i in a:
    a0 = i.strip('\n')
    a0 = a0.strip(',')
    a0 = a0.strip()
    b.append(a0)
f.close()

运行结果:

 列表的元素就是字典文本,当使用a0['url']来提取链接时,提示错误:

 显然,这里还是字典字符串,不是字典。

       2. 利用json模块,将字典字符串转化为字典。

import json
d = []
for i in b :
    c = json.loads(i)
    d.append(c)

运行结果:

这里的列表元素就是字典了。验证一下:

for i in d:
    print(i['url'])
运行结果:

三、关于单引号和双引号的问题

     完成文章后又看了一下其他人的文章,提到json模块在遇到字典里是单引号时会出现,试验了一下,果然有问题。

把文本换成了单引号的:

 运行结果:

 解决的办法:

使用ast模块。

ast模块中的literal_eval方法可以把数据还原成它本身或者是能够转化成的数据类型。同时在转换时会判断需要计算的内容计算后是不是合法的python类型,如果是则进行运算,否则就不进行运算,比较安全

import ast
d = []
for i in b :
    c = ast.literal_eval(i)
    d.append(c)
for i in d:
    print(i['url'])
运行结果:

 又试了下,当换成双引号时,也没有出问题。

四、总结。

    将文本数据转化为python可用的数据类型时,json是一种方法,但ast模块中的literal_eval方法才是一种更好、更全面、更安全的方法。

验证如下:我在txt文本中最后一行加了一个列表文本。

验证代码如下:

import ast
d = []
for i in b :
    c = ast.literal_eval(i)
    d.append(c)
for i in d:
    try:
        print(i['url'])
    except Exception as e:
        print(i)
        print(i[2])

运行结果:

 显然,如果是字典字符串转换化为字典数据,如果是列表字符串就转化成了列表数据。

可见ast模块中的literal_eval方法之强大。

 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值