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

Python如何同时遍历两个长度不同的CSV文件并分别提取列数据

解决方案

原方案使用zip()遍历的核心问题是:zip() 仅会遍历到两个可迭代对象中长度更短的那个耗尽为止,行数不一致时,更长的文件中超出短文件行数的部分会被完全丢弃,无法被读取。

针对两种常见需求场景,分别给出可行实现:

场景1:不需要行对齐,仅分别提取两个文件的全部指定列

如果你的需求只是把f1的第二列全量存入list_A、f2的第一列全量存入list_B,不需要将两个文件的行按位置配对,直接分开遍历两个CSV文件即可,逻辑最简单也最高效:

import csv

list_A = []
list_B = []

with open(file_1,'r') as f1, open(file_2,'r') as f2:
    csvFile_1 = csv.reader(f1, delimiter=',')
    csvFile_2 = csv.reader(f2, delimiter=',')
    # 单独遍历f1提取指定列,增加行长度判断避免索引越界
    for row in csvFile_1:
        if len(row) >= 2:
            list_A.append(row[1])
    # 单独遍历f2提取指定列
    for row in csvFile_2:
        if len(row) >= 1:
            list_B.append(row[0])

场景2:需要行对齐,即第n行的f1数据和f2数据按位置对应

如果需要按行位置配对两个文件的内容,哪怕其中一个文件没有对应行也要留占位,使用itertools.zip_longest替代zip(),它会遍历到最长的文件耗尽为止,缺失的行可以自定义填充值:

import csv
from itertools import zip_longest

list_A = []
list_B = []
# 自定义缺失行的填充值,可根据需求调整为空字符串、None等
FILL_VALUE = []

with open(file_1,'r') as f1, open(file_2,'r') as f2:
    csvFile_1 = csv.reader(f1, delimiter=',')
    csvFile_2 = csv.reader(f2, delimiter=',')

    for x, y in zip_longest(csvFile_1, csvFile_2, fillvalue=FILL_VALUE):
        # 提取f1的第二列,行存在且列足够才追加,也可以自行补充默认值逻辑
        if len(x) >= 2:
            list_A.append(x[1])
        # 提取f2的第一列
        if len(y) >= 1:
            list_B.append(y[0])

说明:zip_longest 的fillvalue参数用于指定较短的文件耗尽后,缺失行的填充值,这里用空列表可以统一后续的长度判断逻辑,避免None调用len()时报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 20:06:03