Python中csv和json文件操作

1.csv的存储操作

"""
csv两种写入操作
csv就是字符分隔的纯文本,字段间的分隔符是其他字符或字符串
csv写入之后的文件可以直接Excel打开
"""
import csv


def write_csv_demo():
    headers = ["username", "age", "height"]
    values = {
        ("张三", 18, 180),
        ("李四", 19, 190),
        ("王五", 20, 160)
    }

    # 写入编码utf-8防止乱码,newline默认
换行,防止换行让它等于空字符串
    with open("classroom.csv", "w", encoding="utf-8", newline="") as fp:
        # 调用csv库的writer()方法并传入fp文件句柄生成<class '_csv.writer'>实例对象
        writer = csv.writer(fp)
        # 调用实例对象的方法writerow()写入一行,默认逗号分隔。传入delimiter=" "可以修改列与列之间的分隔符
        writer.writerow(headers)
        # 写入多行是在writerow的基础之上添加map()方法传入一个函数和列表循环写入
        writer.writerows(values)


def write_csv_site():
    headers = ["username", "age", "height"]
    values = [
        {"username": "张三", "age": 18, "height": 180},
        {"username": "李四", "age": 19, "height": 190},
        {"username": "王五", "age": 20, "height": 160},
    ]
    with open("classroom1.csv", "w", encoding="utf-8", newline="") as fp:
        # DictWriter需要传入一个文件句柄和字典的key列表
        writer = csv.DictWriter(fp, headers)
        # 正式写入需要调用writeheader方法传入文件头
        writer.writeheader()
        # 写入多行文本
        writer.writerows(values)


if __name__ == '__main__':
    write_csv_demo()
    write_csv_site()
View Code

2.csv的读取操作

"""读取csv文件的三种方式"""
import csv
# 在这里也可以使用pandas的read_csv()方法读取csv中的数据
import pandas


def read_csv_demo():
    # 优势:操作简单。劣势:数据排序混乱时取值可能报错
    with open("classroom.csv", "r", encoding="utf-8") as fp:
        # reader是一个迭代器
        reader = csv.reader(fp)
        # 执行一次next,指针跳过一位,可以不获取标题
        next(reader)
        for x in reader:
            print(x)  # 可用列表下标x[1]获取具体对象


def read_csv_site():
    # 优势:即便数据混乱也可以通过key取值。劣势:稍复杂一点
    with open("classroom1.csv", "r", encoding="utf-8") as fp:
        # 使用DictReader创建的reader对象不会包含标签这一行的数据
        reader = csv.DictReader(fp)
        # 遍历reader迭代器返回的是一个有序字典
        for x in reader:
            value = {"name": x["username"], "age": x["age"]}
            print(value)


def pandas_csv_read():
    # 常用在数据分析,方便读取
    content = pandas.read_csv("classroom.csv")
    print("=" * 50)
    print(content)


if __name__ == '__main__':
    read_csv_demo()
    read_csv_site()
    pandas_csv_read()
View Code

3.json的存储和读取操作

"""json文件存储
JavaScript语言中,一切都是对象。因此,任何支持的类型都可以通过JSON来表示,例如字
符串、数字、对象、数组等,但是对象和数组是比较特殊且常用的两种类型。
json构造简洁但是结构化程度非常高,是一种轻量级的数据交换格式。

对象:它在JavaScript中是使用花括号{}包裹起来的内容,数据结构为{keyl:valuel, key2:
value2 }的键值对结构。     和python中的字典相似
数组:数组在 JavaScript 是方括号[]包裹起来的内容,数据结构为["python", "javascript" ,
"vb"]的索引结构。         和python中的列表相似
"""

# JSON的表现形式。
[{"name": "Jim", "age": "24"}, {"name": "Anla", "age": "20"}]


"""采用python中的json库来一波操作"""
import json


# json字符串的表示需要使用双引号。单引号会报错
text = """[{"name": "Jim", "age": "24"}, {"name": "Anla", "age": "20"}]"""
# 类型是str
print(type(text))
# 调用loads()方法读取字符串
content = json.loads(text)
# 转换成列表
print(content)
# 列表索引取值之后字典键名取值。不建议使用此方法,字典无取值对象会报错
print(content[0]["name"])
# 列表索引取值之后字典键名取值。建议使用此方法,字典无取值对象会返回默认值
print(content[1].get("name", None))
# 类型是list
print(type(content))

# 数据写入文件,utf-8编码支持中文显示
with open("data.json", "w", encoding="utf-8") as f:
    # dumps()方法将json对象转化为字符串,f文件句柄调用write()方法把字符串写入文件
    f.write(json.dumps(text, indent=2))     # indent可以让写入的json字符串自带缩进

# 文件读取数据,utf-8编码支持中文显示
with open("data.json", "r", encoding="utf-8") as f:
    # 用变量接收以"r"形式读取的文件内容
    content = f.read()
    # 通过loads()方法解析json字符串
    text = json.loads(content)
    print(text)
View Code
原文地址:https://www.cnblogs.com/Guishuzhe/p/9842356.html