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

Python读取txt/csv表格数据最佳实践:多列拆分与首行跳过

高效读取txt/csv文件并拆分任意列至数组(跳过首行)

你的现有写法有几个明显的效率问题:每次循环重复调用split()做冗余计算,手动处理文件没做自动关闭,而且对不同分隔符(比如多空格、制表符)兼容性差,大文件下一次性把所有行加载到内存也会拖慢速度。下面用Python标准库和常用第三方库给出更高效的解决方案:

方法一:用标准库csv(轻量无依赖)

适合不想额外装库的场景,能自动处理各种分隔符,逐行读取内存占用低:

import csv

# 按需定义存储数组,要几列就建几个列表
x_pareto = []
y_pareto = []
# z_pareto = []  # 需要第三列就解开注释

# 用with上下文自动关文件,不用手动写close()
with open("Pareto Front.txt", "r") as f:
    # skipinitialspace=True会自动跳过分隔符后面的空格,适配多空格分隔的情况
    reader = csv.reader(f, delimiter=" ", skipinitialspace=True)
    next(reader)  # 直接跳过首行
    for row in reader:
        # 按列索引取数据转成float,按需加更多列
        x_pareto.append(float(row[0]))
        y_pareto.append(float(row[1]))
        # z_pareto.append(float(row[2]))

如果是逗号分隔的csv文件,把delimiter=" "改成delimiter=","就行(或者直接省略,csv.reader默认用逗号当分隔符)。

方法二:用pandas(复杂场景/大文件首选)

pandas底层是C实现的,处理大文件速度比纯Python循环快得多,代码也更简洁,还能自动识别各种分隔符:

import pandas as pd

# skiprows=1跳过首行,sep='\s+'匹配任意数量的空格(适配txt),csv文件直接去掉sep参数
df = pd.read_csv("Pareto Front.txt", skiprows=1, sep='\s+', header=None)

# 提取任意列转成列表,比如取第0、1列
x_pareto = df.iloc[:, 0].tolist()
y_pareto = df.iloc[:, 1].tolist()
# 要转numpy数组的话用.values:x_pareto = df.iloc[:, 0].values

这两种方法都避免了冗余的split()操作,能灵活处理任意数量的列,大文件场景下内存和速度表现都远优于你原来的代码。

内容的提问来源于stack exchange,提问作者user17885178

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 00:55:28