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}')