You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在pandas read_csv中保存被跳过的行至文本文件?

如何在使用pandas read_csv跳过行的同时保存被跳过的行?

我懂你的需求——用pandas读取CSV时跳过指定行,同时还要把这些被跳过的行单独存到文件里。可惜read_csv的skiprows参数只能帮你跳过行,没法直接导出这些被跳过的内容,不过我们可以换个思路,先手动拆分文件内容,再分别处理。

解决方案思路

核心就是先把文件的所有内容读出来,手动拆分出「要保留的行」和「要跳过的行」:

  1. 读取原始文件的所有行(或逐行处理,适合大文件)
  2. 把需要跳过的行写入目标文本文件
  3. 把剩下的行传给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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:23:56