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

如何高效将CSV中变长整数列表读入Python且不转为字符串

问题描述

我在CSV表格中存储了多行长度不一的整数列表,示例如下:

22,-14,-24,2,-26,18,20,-4,12,16,8,-6,-10
20,12,-16,18,28,24,4,-22,26,8,-10,-14,2,6
10,-26,-20,30,24,-22,18,-28,12,14,-6,-2,8,-16,-4
16, 22, 30, -18, -26, -28, 24, -8, 32, -14, 12, 4, 20, -10, 2, 6
32, 10, -14, 20, -22, 24, -4, -26, 34, 28, -30, 2, 12, 18, 6, -8, 16
8, -20, 34, 18, 30, 24, -4, 6, 28, -32, -12, -36, 10, 16, -38, 2, 14, -22, -26

需要将每行转换为整数数组,例如:

input = [22,-14,-24,2,-26,18,20,-4,12,16,8,-6,-10]

使用标准CSV读取方法:

import csv
with open(file.csv, 'r') as f:
        reader = csv.reader(f)
        for line in reader:
            print(line)

得到的结果是字符串列表,无法直接用于需要整数数组的函数:

['22', '-14', '-24', '2', '-26', '18', '20', '-4', '12', '16', '8', '-6', '-10']

尝试过csv.QUOTE_NONE等参数无效,因为CSV本身不区分数据类型。文件有10万至100万行,要求解决方案高效,且列数不固定,无法手动转换类型。不局限于CSV格式,求可行方案。

解决方案

一、高效处理CSV文件

核心思路是批量将每行的字符串元素转换为整数,以下几种方法兼顾效率与简洁:

方法1:利用csv.reader的skipinitialspace参数优化

针对行内元素带空格的情况,开启skipinitialspace=True自动忽略逗号后的空格,直接批量转整数:

import csv

with open('file.csv', 'r') as f:
    reader = csv.reader(f, skipinitialspace=True)
    for line in reader:
        int_list = list(map(int, line))
        # 此处调用你的目标函数,如 process_function(int_list)
        print(int_list)

方法2:列表推导式处理复杂格式

如果数据存在额外空格或异常格式,用列表推导式结合strip()清理后转换:

import csv

with open('file.csv', 'r') as f:
    reader = csv.reader(f)
    for line in reader:
        int_list = [int(num.strip()) for num in line]
        # 调用目标函数
        print(int_list)

二、换用更高效的文件格式

若CSV性能无法满足大数据量需求,可选择以下更适合数值型数据的存储格式:

1. NumPy .npy格式

专为数值数组设计,读写速度极快,支持变长列表:

import numpy as np

# 写入数据(示例)
data = [
    [22,-14,-24,2,-26,18,20,-4,12,16,8,-6,-10],
    [20,12,-16,18,28,24,4,-22,26,8,-10,-14,2,6]
]
np.save('data.npy', np.array(data, dtype=object))

# 读取数据
loaded_data = np.load('data.npy', allow_pickle=True)
for line in loaded_data:
    print(line.tolist())  # 转换为普通整数列表使用

2. JSON格式

直接保留列表结构,Python内置json模块处理效率稳定:

import json

# 写入数据(示例)
data = [
    [22,-14,-24,2,-26,18,20,-4,12,16,8,-6,-10],
    [20,12,-16,18,28,24,4,-22,26,8,-10,-14,2,6]
]
with open('data.json', 'w') as f:
    json.dump(data, f)

# 读取数据
with open('data.json', 'r') as f:
    loaded_data = json.load(f)
for line in loaded_data:
    print(line)  # 直接得到整数列表

3. Parquet格式

列式存储格式,压缩率高,超大规模数据场景下性能远超CSV:
先依赖安装:

pip install pyarrow

代码示例:

import pyarrow as pa
import pyarrow.parquet as pq

# 写入数据(示例)
data = pa.array([
    [22,-14,-24,2,-26,18,20,-4,12,16,8,-6,-10],
    [20,12,-16,18,28,24,4,-22,26,8,-10,-14,2,6]
], type=pa.list_(pa.int64()))
table = pa.Table.from_arrays([data], names=['int_lists'])
pq.write_table(table, 'data.parquet')

# 读取数据
table = pq.read_table('data.parquet')
loaded_data = table['int_lists'].to_pylist()
for line in loaded_data:
    print(line)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 12:45:34