3.1-python爬虫之文件存储

本文详细介绍了Python中处理JSON、CSV和Excel文件的方法。包括JSON的序列化与反序列化,CSV文件的读写操作,以及如何利用Python对Excel文件进行读写。通过实例代码演示了如何将Python对象转换为JSON格式,如何将数据写入和读取CSV文件,以及如何处理CSV和Excel文件中的数据。
摘要由CSDN通过智能技术生成

系列文章目录

python爬虫目录



前言

摘录自B站对应课程笔记
不愧是清华大佬!把Python网络爬虫讲得如此简单明了!从入门到精通保姆级教程(建议收藏)

以下是本篇文章正文内容,下面案例可供参考


一、json文件处理

1、什么是json

JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。

在线格式化网站:https://www.json.cn/

2、JSON支持数据格式

  1. 对象(字典)。使用花括号。
  2. 数组(列表)。使用方括号。
  3. 整形、浮点型、布尔类型还有null类型。
  4. 字符串类型(字符串必须要用双引号,不能用单引号)。

多个数据之间使用逗号分开。json本质上就是一个字符串。

3、字典和列表转JSON

python对象转json字符串:dumps

import json
 
# 将 python 对象转换成 json 字符串
persons = [
    {
        "name": "xu1",
        "age": 11,
        "height": 171
    },
    {
        "name": "xu2",
        "age": 12,
        "height": 172
    },
]
persons_str = json.dumps(persons)
print(type(persons_str))  # <class 'str'>
print(persons_str)  # [{"name": "xu1", "age": 11, "height": 171}, {"name": "xu2", "age": 12, "height": 172}]

因为 json 在 dumps 的时候,只能存放 ascii 的字符,因此会将中文进行转义,这时候我们可以使用
ensure_ascii=False 关闭这个特性。
在Python中。只有基本数据类型才能转换成JSON格式的字符串。也即:int、float、str、list、dict、tuple。

# json 无法序列化自定义对象
class Person(object):
    country="china"
a = {
    "person": Person()
}
json.dumps(a)
"""
报错:
    TypeError: Object of type Person is not JSON serializable
"""

python对象转json文件:dump

import json
 
persons = [
    {
        "name": "xu1_许三多",
        "age": 11,
        "height": 171
    },
    {
        "name": "xu2_许三多",
        "age": 12,
        "height": 172
    },
]
# 方法一:将字符串写入文件
# persons_str = json.dumps(persons)
# with open("persons.json", "w", encoding="utf-8") as fp:
#     fp.write(persons_str)
 
# 方法二:直接通过 json.dump 写入对象
with open("persons.json", "w", encoding="utf-8") as fp:
    json.dump(persons, fp, ensure_ascii=False)

json字符串转成Python对象:loads

import json
 
persons_str = '[{"name": "xu1", "age": 11, "height": 171}, {"name": "xu2", "age": 12, "height": 172}]'
persons = json.loads(persons_str)
print(type(persons))
for p in persons:
    print(p)
"""
结果:
    <class 'list'>
    {'name': 'xu1', 'age': 11, 'height': 171}
    {'name': 'xu2', 'age': 12, 'height': 172}
"""

json文件转成Python对象:load

with open("persons.json", "r", encoding="utf-8") as fp:
    persons = json.load(fp)
    print(type(persons))
    for p in persons:
        print(p)
"""
结果:
    <class 'list'>
    {'name': 'xu1_许三多', 'age': 11, 'height': 171}
    {'name': 'xu2_许三多', 'age': 12, 'height': 172}
"""

二、csv文件处理

1、什么是csv

SV文件是最常用的一个文件存储方式。逗号分隔值(Common-Separated Values,CSV)文件以纯文本形式存储表格数据(注:分隔字符也可以是其他字符)。纯文本说明该文件是一个字符序列,不包含必须像二进制数字那样被解读的数据。

CSV文件由任意数目记录组成,记录间以某种换行符分隔;每条记录由若干字段组成,字段间以字符(如逗号)或字符串分隔。

2、CSV读写操作

python数据写到csv文件

按行写入

"""
写入数据到csv文件,需要创建一个writer对象,主要用到两个方法。一个是writerow,这个是写入一行。一个是writerows,这个是写入多行。示例代码如下:
"""
import csv
 
headers = ["name", "age", "height"]
datas = [
    ("许1", 89, 150),
    ("许2", 64, 160),
    ("许3", 60, 170),
]
with open("persons.csv", "w", encoding="utf-8", newline="") as  fp:
    writer = csv.writer(fp)  # 创建一个可写对象
    writer.writerow(headers)  # 写入一行数据
    writer.writerows(datas)  # 写入多行数据

按字典对象写入

import csv
 
headers = ["name", "age", "height"]
datas = [
    {"name":"许1", "age": 12, "height": 23},
    {"name": "许2", "age": 22, "height": 123},
    {"name": "许3", "age": 32, "height": 223},
]
with open("persons2.csv", "w", encoding="utf-8", newline="") as fp:
    writer = csv.DictWriter(fp, headers)  # 创建一个可写对象
    # 注意:写如表头的时候,需要调用 writeheader 方法
    writer.writeheader()
    writer.writerow({"name":"许1", "age": 12, "height": 23})  # 写入一行数据
    writer.writerows(datas)  # 写入多行数据

读取csv文件

按下标获取数据

import csv
with open("persons.csv", "r", encoding="utf8") as fp:
    reader = csv.reader(fp)
    print("返回的类型:{}".format(type(reader)))
    print("第一行内容:{}".format(next(reader)))
    for p in reader:
        print("name = {}, age = {}, height = {}".format(p[0], p[1], p[2]))
"""
结果:
    返回的类型:<class '_csv.reader'>
    第一行内容:['name', 'age', 'height']
    name = 许1, age = 89, height = 150
    name = 许2, age = 64, height = 160
    name = 许3, age = 60, height = 170
"""

通过标题来获取数据

import csv
with open("persons2.csv", "r", encoding="utf8") as fp:
    # 使用 DictReader 创建 reader 对象,不会包含标题那行的数据
    # reader 是一个迭代器, 遍历时返回字典对象
    reader = csv.DictReader(fp)
    print(type(reader))
    for p in reader:
        print("name = {}, age = {}, height = {}".format(p["name"], p["age"], p["height"]))
"""
结果:
    <class 'csv.DictReader'>
    name = 许1, age = 12, height = 23
    name = 许1, age = 12, height = 23
    name = 许2, age = 22, height = 123
    name = 许3, age = 32, height = 223
"""

三、excel文件处理

在这里插入图片描述
excel操作较多,方式较多,可参考以下文章(全文3万+字,需要什么功能直接使用搜索就行):
全网最全Python操作Excel教程,建议收藏!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Nosimper

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值