python之csv、openpyxl/pandas
一、csv 模块
1、写csv的基本流程
打开文件
使用 open() 函数以写模式('w')打开 CSV 文件。
创建 CSV 写入器
使用 csv.writer() 或 csv.DictWriter() 创建一个写入器对象。
写入表头(可选)
使用 writeheader() 方法写入表头,如果使用的是 DictWriter。
写入数据行
使用 writerow() 或 writerows() 方法写入单行或多行数据。
关闭文件
关闭文件以确保数据被写入。
2、写csv案例
def main():
all_sql_info = parse_slow_log(log_file_path)
# 按照 Query_time 排序,降序
sorted_all_sql_info = sorted(all_sql_info, key=lambda x: x.get('query_time', 0), reverse=True)
# 将结果输出到csv文件
with open(output_file_path, 'w', newline='', encoding='utf-8') as csvfile:
fieldnames = ['开始时间', '登录信息', '查询耗时/s', '锁表耗时/s', '返回行数', '扫描行数', 'SQL']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
for q in sorted_all_sql_info:
writer.writerow({
'开始时间': q.get('time', 'N/A'),
'登录信息': q.get('user_host', 'N/A'),
'查询耗时/s': q.get('query_time', 'N/A'),
'锁表耗时/s': q.get('lock_time', 'N/A'),
'返回行数': q.get('rows_sent', 'N/A'),
'扫描行数': q.get('rows_examined', 'N/A'),
'SQL': q.get('exec_sql', 'N/A')
})
print(f'结果成功保存到: {output_file_path}')
注意:
1、表头的内容在 fieldnames 列名中,调用 writeheader() 方法会使用 fieldnames 中的列名,向 CSV 文件写入表头。
fieldnames 确立了写入 CSV 文件的列名,它对于后续多个字典形式的数据写入是非常重要的,确保了数据的结构一致性。
2、写入器的补充:
一般使用 csv.writer 和 csv.DictWriter
csv.writer
- 功能:用于将行写入 CSV 文件,默认以逗号作为分隔符。
- 使用场景:适用于简单的数据写入,不需要指定列名的情况,通常用于已知列顺序的元组或列表的写入。
csv.DictWriter
- 功能:用于以字典的形式写入行,允许通过列名来指定每列的内容。
- 使用场景:适用于数据来源为字典的情况,方便管理列名及其对应的数据,常用于复杂的数据结构。
3、读csv的基本流程
打开文件
使用 open() 函数以读模式('r')打开 CSV 文件。
创建 CSV 读取器
使用 csv.reader() 或 csv.DictReader() 创建一个读取器对象。
读取数据行
使用 reader() 方法读取所有行,或使用迭代遍历逐行读取。
关闭文件
关闭文件(如果不使用 with 语句,建议手动关闭)。
4、读csv案例
import csv
# 打开文件,设置读模式
with open('output.csv', 'r', encoding='utf-8') as csvfile:
reader = csv.DictReader(csvfile) # 创建 DictReader 对象
for row in reader: # 逐行遍历
print(row) # 每行数据以字典形式输出
二、openpyxl 和 pandas模块
1、openpyxl和pandas的使用场景
openpyxl
openpyxl 是一个用于读写 Excel 文件(特别是 .xlsx 格式)的库。它允许用户通过 Python 程序创建、修改和提取 Excel 文件的内容,支持各种 Excel 功能,如设置单元格格式、操作图表等。下面是一些 openpyxl 的主要功能:
- 读取和写入 Excel 文件:能够加载已存在的 Excel 文件,并新建 Excel 文件。
- 单元格操作:可以读取和设置单元格的值、格式、样式等。
- 工作表操作:能够创建、删除和重命名工作表。
- 公式支持:可以在单元格中添加 Excel 的公式。
- 图表生成:支持在工作簿中添加图表。
pandas
pandas 是一个强大的数据分析和数据处理库,它不仅能处理 Excel 文件,还能处理 CSV、SQL 数据库等多种数据格式。pandas 的数据结构(如 DataFrame 和 Series)非常适合用于数据分析。它的主要功能包括:
- 数据结构:提供 DataFrame 和 Series 两种主要数据结构,可以方便地处理和操作数据。
- 数据读取与写入:支持从多种文件格式读取数据(如 CSV、Excel、JSON、SQL 等)以及将数据写入这些格式。
- 数据处理和清洗:提供丰富的方法来处理缺失值、过滤数据、合并和连接数据。
- 数据分析:可以快速进行聚合和分组操作、数据透视表等。
- 时间序列处理:对时间序列数据提供强大的支持,方便进行时间序列分析。
总结
- 如果你的工作主要涉及 Excel 文件的读写和格式处理,使用
openpyxl会比较合适。 - 如果你的任务包括数据分析、处理和可视化,并且可能需要处理多种文件格式,
pandas是一个更全面的选择。
2、openpyxl 的使用
1、安装
pip install openpyxl
2、创建工作簿
from openpyxl import Workbook, load_workbook # 创建一个新的工作簿 wb = Workbook() # 选择当前活动工作表 ws = wb.active # 可以为工作表重命名 ws.title = "Sheet1"
3、写入数据、保存
# 向单元格写入数据
ws['A1'] = "Hello"
ws['B1'] = "World"
# 使用循环写入多行数据
for i in range(2, 10):
ws.append([f"Data {i}", i])
# 保存工作簿到文件
wb.save("my_workbook.xlsx")
4、读取 Excel 文件
# 加载已存在的工作簿
wb = load_workbook("my_workbook.xlsx")
# 选择工作表
ws = wb.active # 或者 ws = wb['Sheet1']
# 读取单元格的值
print(ws['A1'].value) # 输出: Hello
# 遍历工作表中的所有单元格
for row in ws.iter_rows(values_only=True):
print(row) # 每一行以元组形式输出
5、修改单元格内容
# 修改单元格的内容
ws['A1'] = "Hello, OpenPyXL"
# 保存更改
wb.save("my_workbook.xlsx")
# 删除工作表
ws_to_delete = wb["Sheet1"]
wb.remove(ws_to_delete)
# 保存更改
wb.save("my_workbook.xlsx")
# 合并单元格
ws.merge_cells('A1:B1') # 合并 A1 和 B1
ws['A1'] = "Merged Cell" # 设置合并后的单元格值
from openpyxl.styles import Font
# 设置字体样式
font = Font(bold=True, color="FF0000") # 红色加粗
ws['A1'].font = font
6、案例
def save_to_excel(data, file_path):
# 创建一个工作簿
wb = Workbook()
ws = wb.active
ws.title = "Slow Log Analysis"
# 添加表头
headers = ['开始时间', '登录信息', '查询耗时/s', '锁表耗时/s', '返回行数', '扫描行数', 'SQL']
ws.append(headers)
# 添加数据
for item in data:
ws.append([
item.get('time'),
item.get('user_host'),
item.get('query_time'),
item.get('lock_time'),
item.get('rows_sent'),
item.get('rows_examined'),
item.get('exec_sql')
])
# 保存工作簿
wb.save(file_path)
def main():
all_sql_info = parse_slow_log(log_file_path)
# 按照 Query_time 排序,降序
sorted_all_sql_info = sorted(all_sql_info, key=lambda x: x.get('query_time', 0), reverse=True)
# 将结果输出到 Excel 文件
save_to_excel(sorted_all_sql_info, output_file_path)
print(f'结果成功保存到: {output_file_path}')
if __name__ == "__main__":
main()
3、pandas的使用
1、pandas的基本使用流程
import pandas as pd
# 从字典创建 DataFrame
data = {
'Name': ['Alice', 'Bob', 'Charlie'],
'Age': [24, 30, 22],
'City': ['New York', 'Los Angeles', 'Chicago']
}
df = pd.DataFrame(data)
# 从列表创建 DataFrame
data = [['Alice', 24, 'New York'], ['Bob', 30, 'Los Angeles'], ['Charlie', 22, 'Chicago']]
df = pd.DataFrame(data, columns=['Name', 'Age', 'City'])
pd.DataFrame 是 pandas 库中的一个核心数据结构,类似于电子表格或 SQL 表。它提供了一种方便的方法来存储和操作表格型数据。以下是 pd.DataFrame 的详细介绍,包括其特性、常用操作和示例。
特性
-
二维数据结构:
DataFrame是一个带有行和列的数据表,可以看作是一个字典的字典或一个二维数组。 -
灵活的行列索引:每一列可以有不同的数据类型(整数、浮点数、字符串等),并可以通过标签或数值索引来访问数据。
-
自动对齐:在合并或拼接多个
DataFrame时,pandas会根据它们的索引对齐数据。 -
多种输入、输出格式:可以从多种文件格式(CSV、Excel、SQL 等)读取数据,也可以输出为不同格式的文件。
-
强大的数据操作功能:支持数据选择、过滤、计算、分组和合并等多种操作。
2、创建、读取、修改和写入数据的基本流程
import pandas as pd
# 创建 DataFrame
data = {
'Name': ['Alice', 'Bob', 'Charlie'],
'Age': [24, 30, 22],
'City': ['New York', 'Los Angeles', 'Chicago']
}
df = pd.DataFrame(data)
# 查看数据
print(df.head())
# 过滤出年龄大于25的人
filtered_df = df[df['Age'] > 25]
print(filtered_df)
# 添加新列
df['Salary'] = [50000, 60000, 55000]
# 修改年龄列
df['Age'] = df['Age'] + 1
# 排序
sorted_df = df.sort_values(by='Age', ascending=False)
# 保存到 CSV 文件
sorted_df.to_csv('output.csv', index=False)
3、写一个excel文件案例
def main():
all_sql_info = parse_slow_log(log_file_path)
# 按照 Query_time 排序,降序
sorted_all_sql_info = sorted(all_sql_info, key=lambda x: x.get('query_time', 0), reverse=True)
# 使用 pandas 创建 DataFrame
df = pd.DataFrame(sorted_all_sql_info)
# 将结果输出到 Excel 文件
df.to_excel(output_file_path, index=False,
header=['开始时间', '登录信息', '查询耗时/s', '锁表耗时/s', '返回行数', '扫描行数', 'SQL'])
print(f'结果成功保存到: {output_file_path}')

浙公网安备 33010602011771号