如何在pandas read_csv中保存被跳过的行至文本文件?
如何在使用pandas read_csv跳过行的同时保存被跳过的行?
我懂你的需求——用pandas读取CSV时跳过指定行,同时还要把这些被跳过的行单独存到文件里。可惜read_csv的skiprows参数只能帮你跳过行,没法直接导出这些被跳过的内容,不过我们可以换个思路,先手动拆分文件内容,再分别处理。
解决方案思路
核心就是先把文件的所有内容读出来,手动拆分出「要保留的行」和「要跳过的行」:
- 读取原始文件的所有行(或逐行处理,适合大文件)
- 把需要跳过的行写入目标文本文件
- 把剩下的行传给pandas生成DataFrame
代码示例(小文件场景)
如果你的CSV文件不大,一次性读取所有行效率很高:
import pandas as pd from io import StringIO # 定义要跳过的行索引(0-based,和pandas skiprows参数规则一致) skiprows = [1, 3] input_file = "your_input.csv" output_skipped = "output.txt" # 读取所有行到内存 with open(input_file, 'r') as f: all_lines = f.readlines() # 分离跳过的行和要保留的行 skipped_lines = [all_lines[idx] for idx in skiprows] kept_lines = [line for idx, line in enumerate(all_lines) if idx not in skiprows] # 保存被跳过的行到output.txt with open(output_skipped, 'w') as f: f.writelines(skipped_lines) # 用StringIO在内存中读取保留的行,生成DataFrame df = pd.read_csv(StringIO(''.join(kept_lines)))
代码示例(大文件场景)
如果你的CSV文件很大,一次性加载所有行太占内存,可以逐行处理:
import pandas as pd from io import StringIO skiprows = [1, 3] input_file = "your_input.csv" output_skipped = "output.txt" kept_lines = [] # 逐行读取,同时拆分内容 with open(input_file, 'r') as f_in, open(output_skipped, 'w') as f_out: for idx, line in enumerate(f_in): if idx in skiprows: f_out.write(line) else: kept_lines.append(line) # 生成DataFrame df = pd.read_csv(StringIO(''.join(kept_lines)))
处理1-based行号的情况
如果你的skiprows列表是从1开始计数的行号(比如你提到的[1,5,10]是实际文件的第1、5、10行),只需要把它转成0-based索引即可:
# 假设skiprows是1-based的行号 skiprows_1based = [1, 3] skiprows_0based = [x - 1 for x in skiprows_1based]
然后用skiprows_0based替换上面代码里的skiprows就行。
这样就能完全实现你的需求:既跳过了指定行生成DataFrame,又把被跳过的内容保存到了output.txt里。
内容的提问来源于stack exchange,提问作者Venkata Gogu
相关产品推荐
相关产品推荐

