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

如何同时读取两个CSV文件并调用两个文件多列中的变量

你的代码存在以下几处错误:

  • 缺少依赖模块导入,运行时会直接抛出未定义错误,需要先导入csv和time模块
  • with语句下的代码块没有正确缩进,不符合Python语法规则
  • 变量调用逻辑错误:csv.DictReader返回的每一行是字典格式,需要通过row[字段名]的方式取值,你直接调用username、title会报未定义错误
  • 嵌套循环存在迭代器耗尽问题:csv.DictReader是迭代器对象,第一次内层循环遍历完rdr2后,后续外层循环迭代时内层不会再返回任何内容

场景1:两个CSV行数相同,按行一一对应取值

如果需要test1的第N行对应test2的第N行取值,使用zip同时迭代两个读取器即可:

import csv
import time

with open("test1.csv","r",encoding="utf-8") as f, open("test2.csv","r",encoding="utf-8") as g:
    fieldnames = ['username', 'password']
    fieldnames2 = ['title', 'afflink']
    rdr1 = csv.DictReader(f, delimiter=',', fieldnames=fieldnames)
    rdr2 = csv.DictReader(g, delimiter=',', fieldnames=fieldnames2)

    for row1, row2 in zip(rdr1, rdr2):
        print(row1['username'], row2['title'])
        time.sleep(1)

场景2:test1的每一行匹配test2的所有行(笛卡尔积)

如果要实现你原有嵌套逻辑的效果,需要先把test2的所有数据缓存到列表中,避免迭代器单次遍历后耗尽:

import csv
import time

with open("test1.csv","r",encoding="utf-8") as f, open("test2.csv","r",encoding="utf-8") as g:
    fieldnames = ['username', 'password']
    fieldnames2 = ['title', 'afflink']
    rdr1 = csv.DictReader(f, delimiter=',', fieldnames=fieldnames)
    # 提前把test2的所有数据读取到列表缓存
    rdr2_list = list(csv.DictReader(g, delimiter=',', fieldnames=fieldnames2))

    for row1 in rdr1:
        for row2 in rdr2_list:
            print(row1['username'], row2['title'])
            time.sleep(1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 08:06:03