json和txt文件的读取和json文件与字典之间的格式读取转换

本文介绍了如何在Python中读取和写入txt及json文件,包括字典转json、json文件读取,特别是处理字典列表和单行字典数据的方法,强调了在爬虫中保存数据的策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

json和txt文件的读取和json文件与字典之间的格式读取转换

一. 读取txt文件

with open('filename.txt','r',encoding='utf-8') as f:
    data = f.readlines()

这样会将filename.txt文件中的内容以列表的形式读入到data中,每一行数据为一个元素。

二. 将字典写入到json文件

import json
dict_data = {}
with open('filename.json','w',encoding='utf-8') as f:
    f.write(json.dumps(dict_data,indent=4,ensure_ascii=False))

这样的话会将字典dict_data写入filename.json文件。

  • indent=4代表按格式缩进4个空格
  • ensure_ascii=False对于非ascii字符不采用ascii编码,可以处理中文乱码问题
栗子
1. 字典数据
import json

dict_data = {
    'English_name':'Jack',
    'Chinese_name':'接客',
    'age':18
}
with open('test.json','w',encoding='utf-8') as f:
    f.write(json.dumps(dict_data,indent=4,ensure_ascii=False))

运行之后json文件为:

{
    "English_name": "Jack",
    "Chinese_name": "接客",
    "age": 18
}
2. 字典列表数据

当然dict_data也可以是字典列表,也就是说dict_data本身是一个列表,其中的每一个元素是一个字典。如:

dict_data = [
    {
        'English_name':'Jack',
        'Chinese_name':'接客',
        'age':18
    },
    {
        'English_name':'John',
        'Chinese_name':'约汉',
        'age':20
    }
]

其他写入文件的代码不变,运行之后保存的json文件结构为:

[
    {
        "English_name": "Jack",
        "Chinese_name": "接客",
        "age": 18
    },
    {
        "English_name": "John",
        "Chinese_name": "约汉",
        "age": 20
    }
]
3. 单行字典数据

有的时候会有这样的要求:存到json文件里的数据,每一条数据只占一行。

为了满足这个要求,只需要去掉json.dumps()函数中的indent=4即可。代码如下:

dict_data = {
    'English_name':'Jack',
    'Chinese_name':'接客',
    'age':18
}
with open('test.json','w',encoding='utf-8') as f:
    f.write(json.dumps(dict_data,ensure_ascii=False)+'\n')#最好加一个换行

注意:这大多用在每次都插入一条字典数据的情况,这样的话可以让每一条字典数据占一行。如:

dict_data = [
    {
        'English_name':'Jack',
        'Chinese_name':'接客',
        'age':18
    },
    {
        'English_name':'John',
        'Chinese_name':'约汉',
        'age':20
    }
]
with open('test.json','w',encoding='utf-8') as f:
    for data in dict_data:
        f.write(json.dumps(data,ensure_ascii=False)+'\n')

效果为:

{"English_name": "Jack", "Chinese_name": "接客", "age": 18}
{"English_name": "John", "Chinese_name": "约汉", "age": 20}

每条数据占一行。(其实在做爬虫的时候经常采用这种方式,因为你每爬到一条数据就要将它存到json文件中,如果你想要全部爬完数据再存的话,万一爬虫程序中间突然异常退出,你爬的数据就莫得了~~)

三. json文件的读取

  1. 如果采用:
f.write(json.dumps(data,ensure_ascii=False)+'\n')

的方式保存的json文件,格式如下:

{"English_name": "Jack", "Chinese_name": "接客", "age": 18}
{"English_name": "John", "Chinese_name": "约汉", "age": 20}

读取这样的json文件的话,很明显每一行是一条数据,也就是一个字典,那么就可以按行读并用json.loads()来处理,代码如下:

with open('test.json','r',encoding='utf-8') as f:
    for line in f:
        data.append(json.loads(line.strip()))

得到的结果data是一个列表,每一个元素是一个字典。

  1. 如果利用结构化方法存储json文件,即如下结构的json文件:
[
    {
        "English_name": "Jack",
        "Chinese_name": "接客",
        "age": 18
    },
    {
        "English_name": "John",
        "Chinese_name": "约汉",
        "age": 20
    }
]

那么读取该json文件可以更直接,不能按行处理了,代码如下:

with open('test.json','r',encoding='utf-8') as f:
    data = json.loads(f.read())

同样,得到的结果data是一个列表,每一个元素一个字典。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值