Python3实现数据存储为json、csv、xlsx

685 阅读2分钟

json文件存储

import json
# 读
with open('data.json', 'r', encoding='utf-8') as fp:
    data = json.loads(fp.read())
# 写,且具备缩进与中文显示
with open('data.json', 'w', encoding='utf-8') as fp:
    fp.write(json.dumps(data, indent=2, ensure_ascii=False))

xlsx文件存储

# 写
from openpyxl import Workbook

# 在内存中创建一个workbook对象,而且会至少创建一个 worksheet
wb = Workbook()

# 获取当前活跃的worksheet,默认就是第一个worksheet
ws = wb.active

# 可以使用append插入一行数据, 可以放到for里批量写入
ws.append(["我", "你", "她"])

# 保存
wb.save(filename="data.xlsx")


# 读
from openpyxl import load_workbook

# 打开一个workbook
wb = load_workbook(filename="data.xlsx")

# 获取当前活跃的worksheet,默认就是第一个worksheet
# ws = wb.active

# 当然也可以使用下面的方法

# 获取所有表格(worksheet)的名字
sheets = wb.get_sheet_names()
# 第一个表格的名称
sheet_first = sheets[0]
# 获取特定的worksheet
ws = wb.get_sheet_by_name(sheet_first)

# 获取表格所有行和列,两者都是可迭代的
rows = ws.rows
columns = ws.columns

# 迭代所有的行
for row in rows:
    line = [col.value for col in row]
    print(line)

# 迭代所有的列
for column in columns:
    line = [ro.value for ro in column]
    print(line)

cvs文件存储

import csv

# 写入, 方法一(追加用a):
# 参数newline,防止行与行之间多处空行;想修改列与列之间的分隔符,可以传入delimiter参数
# 出现中文乱码改用encoding='utf-8-sig'
with open('data.csv', 'w', encoding='utf-8', newline='') as csv_file:
    writer = csv.writer(csv_file, delimiter=',')
    writer.writerow(['id', 'name', 'age'])
    writer.writerow(['1001', 'aici', '22'])
    writer.writerow(['1002', 'iicey', '24'])
    writer.writerow(['1003', 'ice', '18'])
# 写入, 方法二(二维列表):
with open('data.csv', 'w', encoding='utf-8', newline='') as csv_file:
    writer = csv.writer(csv_file, delimiter=',')
    writer.writerow(['id', 'name', 'age'])
    writer.writerows([['1001', 'aici', '22'], ['1002', 'iicey', '24'], ['1003', 'ice', '18']])
# 写入, 方法三(字典):
with open('data.csv', 'w', encoding='utf-8', newline='') as csv_file:
    fieldnames = ['id', 'name', 'age']
    writer = csv.DictWriter(csv_file, fieldnames=fieldnames)
    writer.writeheader()
    writer.writerow({'id': '1001', 'name': 'aici', 'age': '22'})
    writer.writerow({'id': '1002', 'name': 'iicey', 'age': '24'})
    writer.writerow({'id': '1003', 'name': 'ice', 'age': '18'})

# 读取, 方法一:
import csv
with open('data.csv', 'r', encoding='utf-8', newline='') as csv_file:
    reader = csv.reader(csv_file)
    print(list(reader))
# 读取, 方法二:
import pandas as pd
df = pd.read_csv('data.csv')
print(df)