Python分割大CSV文件时函数定义触发SyntaxError错误求助
解决Python分割CSV文件的语法错误及代码优化
语法错误原因
函数定义时,参数列表里不能直接写常量值10000,必须为参数指定变量名(比如rows_per_chunk),这是Python函数定义的基本语法要求。
修正后的完整代码
import pandas as pd import os import numpy as np def split_csv_into_chunks(file_path, rows_per_chunk=10000): # 读取CSV文件到DataFrame df = pd.read_csv(file_path) # 计算需要分割的总块数(处理总行数无法被分片行数整除的情况) total_chunks = len(df) // rows_per_chunk + (1 if len(df) % rows_per_chunk != 0 else 0) # 分割DataFrame chunks = np.array_split(df, total_chunks) # 获取文件名(不含路径和后缀) file_name = os.path.splitext(os.path.basename(file_path))[0] # 创建输出目录(避免文件散落在根目录) output_dir = "split_chunks" os.makedirs(output_dir, exist_ok=True) # 保存每个分片 for i, chunk in enumerate(chunks): chunk_path = os.path.join(output_dir, f"{file_name}_chunk_{i+1}.csv") chunk.to_csv(chunk_path, index=False) print(f"分片 {i+1} 已保存至: {chunk_path}") # 调用函数执行分片 Endcustomers = "Resources/WESTCON_INTE_LTD_2024_01_GBP.csv" split_csv_into_chunks(Endcustomers)
额外优化说明
- 参数化配置:将分片行数设为带默认值的参数,方便灵活调整分片大小
- 路径安全处理:用
os.path模块处理文件名和路径,避免跨平台路径兼容问题 - 目录管理:自动创建分片保存目录,保持文件结构整洁
- 边界逻辑修正:优化总块数计算逻辑,避免总行数为分片行数整数倍时生成空文件
超大型CSV的进阶优化(避免内存溢出)
如果CSV文件大到无法一次性加载到内存,改用pd.read_csv的chunksize参数逐块读取处理:
import pandas as pd import os def split_large_csv(file_path, rows_per_chunk=10000): file_name = os.path.splitext(os.path.basename(file_path))[0] output_dir = "split_chunks" os.makedirs(output_dir, exist_ok=True) # 逐块读取CSV,无需一次性加载全部数据 chunk_iter = pd.read_csv(file_path, chunksize=rows_per_chunk) for i, chunk in enumerate(chunk_iter): chunk_path = os.path.join(output_dir, f"{file_name}_chunk_{i+1}.csv") chunk.to_csv(chunk_path, index=False) print(f"分片 {i+1} 已保存至: {chunk_path}") # 调用执行 split_large_csv("Resources/WESTCON_INTE_LTD_2024_01_GBP.csv")
内容的提问来源于stack exchange,提问作者RedaB
相关产品推荐
相关产品推荐

