Python如何查找含指定字符串的行索引作为pandas读取CSV的表头行
原代码问题说明
你写的代码返回最大索引、运行报错主要是3个原因:
- 匹配到包含"Scan Number"的行后没有终止遍历,循环会一直执行到文件末尾,最终
cnt的值就是文件最后一行的索引,不是你要找的表头行 - 找到匹配内容时没有保存对应行号、也没有跳出循环
with open本身是上下文管理器,会在代码块结束后自动关闭文件,不需要手动写readfile.close,而且你写的close没加括号,就算执行也不会生效
可行实现代码
逐行扫描文件,找到目标表头行立刻停止遍历,不需要读取整个文件,效率更高,同时加了异常校验避免找不到表头时报错:
import pandas as pd import glob # 配置要匹配的表头特征字符串 target_header_text = "Scan Number" # 匹配所有符合命名规则的传感器csv文件,单文件直接写["sensor_1.csv"]即可 file_list = glob.glob("sensor_*.csv") for file_path in file_list: header_index = None # 逐行读文件,找到目标行立刻终止 with open(file_path, "r", encoding="utf-8") as f: for row_num, line_content in enumerate(f): # 可以按需改成if target_header_text in line_content.strip(),忽略行首尾空白 if target_header_text in line_content: header_index = row_num break # 校验是否找到表头,避免后续读文件报错 if header_index is None: raise ValueError(f"文件 {file_path} 中未找到包含{target_header_text}的表头行,请检查文件内容") # 传入找到的行号读取DataFrame df = pd.read_csv(file_path, sep=",", header=header_index) # 后续数据处理逻辑写在这里 print(f"读取完成,{file_path}的表头位于第{header_index}行")
补充说明
- 如果你的CSV文件是其他编码(比如GBK、Latin-1),同步修改
open()和pd.read_csv()的encoding参数即可 - 如果表头行存在首尾空格、不可见字符导致匹配失败,就把判断条件里的
line_content换成line_content.strip(),先去除行首尾的空白字符再做匹配
内容的提问来源于stack exchange,提问作者Paulina
相关产品推荐
相关产品推荐

