如何从CSV文件中筛选指定行并跳过其他行?
如何从CSV文件中提取特定行并跳过其他行?
嘿,这个需求挺常见的,我给你几个不同场景下的实现方案,你可以根据自己的技术栈挑最合适的:
方法一:使用Python内置csv模块(无额外依赖)
如果不想安装第三方库,用Python自带的csv模块就能轻松搞定。核心思路是遍历文件的每一行,记录行号,然后判断行号是否在你需要的范围内。
注意: 这里默认行号从1开始计数(对应文件里的第1行、第2行……),如果你的CSV第一行是表头,这个逻辑依然适用。
import csv # 定义要保留的行号范围:3-37(因为3-9和10-37是连续的,合并成一个范围更高效) target_rows = range(3, 38) # range是左闭右开,所以结束值写38才能包含37行 with open('input.csv', 'r', newline='', encoding='utf-8') as infile, \ open('output.csv', 'w', newline='', encoding='utf-8') as outfile: reader = csv.reader(infile) writer = csv.writer(outfile) # 用enumerate给每行加上行号,start=1让行号从1开始 for row_num, row in enumerate(reader, start=1): if row_num in target_rows: writer.writerow(row)
如果你的需求是提取不连续的行范围(比如3-9和20-37),只需要把判断条件改成:
if row_num in range(3, 10) or row_num in range(20, 38):
方法二:使用Pandas(适合大型CSV或后续数据处理)
如果你平时常用Pandas做数据分析,这个方法会更简洁,尤其适合处理大文件或者需要对提取后的数据做进一步操作的场景:
import pandas as pd # 读取CSV文件(如果没有表头,记得加header=None) df = pd.read_csv('input.csv') # Pandas的索引默认从0开始,所以文件的第3行对应索引2,第37行对应索引36 target_indices = range(2, 37) # 筛选目标行并保存,index=False避免把索引写入输出文件 df.iloc[target_indices].to_csv('output.csv', index=False)
方法三:命令行工具awk(快速处理,无需写代码)
如果你不想写代码,用系统自带的awk工具可以快速完成提取,效率很高:
# 提取文件第3到37行,输出到output.csv awk 'NR>=3 && NR<=37' input.csv > output.csv
NR是awk的内置变量,表示当前处理的行号,这条命令会直接把符合行号范围的内容写入输出文件。
内容的提问来源于stack exchange,提问作者PKPython
相关产品推荐
相关产品推荐

