使用Pandas清理并读取含冗余文本的大量CSV文件
批量清理并读取带首尾冗余文本的CSV文件
我有超过10000个CSV文件,所有文件首尾都存在冗余文本,必须先清理才能读取有效数据。以下是这类文件的示例,有效数据的表头为Student,id,add,div,rank:
SAMPLE FILE LTD STUDENT NUMBERS INFO OF ALL STUDENTS No : from 27-Mar-2023 00:00:00 to 04-Apr-2023 00:00:00 and from 05-Oct-2023 00:00:00 to 13-Oct-2023 00:00:00 Student,id,add,div,rank ABC,12,USA,A,1 DEF,13,IND,C,2 XYZ,14,UK,E,3 PQR,15,DE,F,4 This is System generated report, and needs no signature. 14-Oct-2023 18:14:12
我找到的一种解决方案代码如下(已替换为中文注释):
# 读取文件直到找到目标标识,返回需要跳过的前置冗余行数 def get_rows_to_skip(file_name, filter_str): rows = 0 # 使用with语句自动关闭文件,避免资源泄漏 with open(file_name, 'r') as file: while True: line = file.readline() # 处理文件读取完毕仍未找到标识的情况 if not line: return -1 if filter_str in line: return rows rows += 1 def read_csv(): file_name = "/Users/test/Desktop/student/students.csv" # 以表头中的"rank"为标识,确定需要跳过的前置行数 skip_rows = get_rows_to_skip(file_name, "rank") if skip_rows == -1: print("文件中未找到有效表头") return # 跳过前置冗余行读取CSV df = pd.read_csv(file_name, skiprows=skip_rows) # 过滤末尾的冗余行(保留rank列不为空的有效数据) df = df[df['rank'].notna()] print("读取完成")
补充优化建议
- 批量处理适配:针对10000个文件,可结合
glob.glob遍历目标目录下所有CSV文件,循环调用读取逻辑 - 异常防护:增加文件不存在、权限不足等异常捕获,避免批量处理中途中断
- 末尾冗余精准定位:如果末尾冗余文本有固定标识(比如示例中的"This is System generated report"),可以模仿前置行数的逻辑找到结束行,只读取到该行之前的内容,比事后过滤更高效
内容的提问来源于stack exchange,提问作者arpit joshi
相关产品推荐
相关产品推荐

