如何查找CSV文件中所有列均有数据的行范围?
找到CSV中所有列都有数据的行范围
针对你给出的CSV数据场景,这里提供几种实用的解决方法,适配不同使用场景:
方法一:Python脚本(适配复杂CSV格式)
如果你的CSV存在分号分隔、字段带双引号等复杂情况,用Python的csv模块能正确解析,避免手动分割出错。
直接使用以下脚本,替换your_file.csv为你的文件名,根据实际CSV格式调整参数:
import csv # 根据CSV实际情况修改参数:比如分隔符是分号就改delimiter=';' csv_settings = { 'delimiter': ',', 'quotechar': '"', 'skipinitialspace': True } full_data_rows = [] with open('your_file.csv', 'r', newline='', encoding='utf-8') as csv_file: reader = csv.DictReader(csv_file, **csv_settings) # 指定要检查的列,也可以直接用所有列:columns_to_check = reader.fieldnames columns_to_check = ['A', 'B', 'C', 'D'] # 遍历行,记录所有列都非空的行号(从1开始对应表格行号) for row_index, row in enumerate(reader, start=1): all_columns_filled = all(row[col].strip() != '' for col in columns_to_check) if all_columns_filled: full_data_rows.append(row_index) # 提取连续的行范围 if full_data_rows: ranges = [] current_start = full_data_rows[0] last_row = current_start for row_num in full_data_rows[1:]: if row_num == last_row + 1: last_row = row_num else: ranges.append((current_start, last_row)) current_start = row_num last_row = row_num ranges.append((current_start, last_row)) print("所有列都有数据的行范围:") for start, end in ranges: print(f"行 {start} 到 行 {end}" if start != end else f"行 {start}") else: print("没有找到所有列都非空的行")
针对你提供的示例数据,运行后会输出行4到行7(对应原数据Index为3-6的行)。
方法二:Excel可视化处理
如果你习惯用GUI工具,Excel操作更直观:
- 打开CSV文件,导入时注意选择正确的分隔符(逗号/分号)。
- 新增辅助列,比如在最后一列输入公式:
=AND(A2<>"", B2<>"", C2<>"", D2<>""),下拉填充到所有行。这个公式会返回TRUE(当前行全列有数据)或FALSE(有空列)。 - 筛选辅助列为
TRUE的行,直接观察行号即可找到连续范围。
方法三:命令行awk(适合简单CSV)
如果你的CSV没有带引号的复杂字段,用awk可以快速输出符合条件的行号:
# 逗号分隔的情况 awk -F ',' 'NR==1{col_count=NF; next} {valid=1; for(i=1;i<=col_count;i++) if($i ~ /^[[:space:]]*$/) {valid=0; break} if(valid) print NR}' your_file.csv # 分号分隔的话,把-F ','改成-F ';'
输出的数字就是符合条件的行号,自行整理连续范围即可。
内容的提问来源于stack exchange,提问作者B6h612
相关产品推荐
相关产品推荐

