【问题标题】:Read two csv files simultaneously and use variables同时读取两个csv文件并使用变量
【发布时间】:2022-01-02 18:08:18
【问题描述】:

我正在尝试同时读取两个 csv 文件并使用多列中每一列的变量。我已经尝试了一切并搜索了所有内容,但没有运气。 这是我糟糕的代码:

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 row in rdr1:
    for row in rdr2:
        print(username, title)
        time.sleep(1)

【问题讨论】:

  • 能否提供您的 csv 文件示例?

标签: python python-3.x csv


【解决方案1】:

您的嵌套循环可能不会做您想做的事,尽管您实际上并没有告诉我们您想要什么。内部循环将消耗第二个文件中的所有数据,然后继续读取第一个文件的第二行,但是您不能再次循环第二个文件(除非您关闭并重新打开并从头开始) .可能你想一次读一行。

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

    for d1, d2 in zip(rdr1, rdr2):
        print(d1['username'], d2['title'])

如果您的现实生活中的循环比这更复杂,也许将字典与d1.update(d2) 之类的东西结合起来。这里的主要问题是观察到 DictReader 对象返回字典(您必须使用 dict['key'],而不是 key 来检索 key 的值)并且您可以使用 zip 来循环成对的值。

【讨论】:

  • 嘿,谢谢你,到目前为止它工作正常。但是如何从每个文件的两个(或更多)列中获取值?因为我之前尝试过使用 zip 并且它总是抛出“没有足够的值来解压,...”错误。
  • 如果你 zip 两个列表并循环遍历结果,每次迭代都会得到两个值,在这种情况下,每个值都包含一个字典,其中包含每个文件中的一行。我猜你试图以某种方式访问​​这些字典中的各个字段。如果无法访问损坏的代码,我显然只能推测。
  • 如果这解决了您的问题,请考虑接受它。或者,您可以发布自己的答案并接受。接受答案通过将问题标记为已解决来帮助未来的访问者。另见help.
  • 好吧,我尝试添加这样的一行:for d1, d2, d3 in zip(rdr1, rdr2): print(d1['username'], d2['title'], d3[ 'afflink']) - 但这显然不起作用。如何读取这 2 个文件中的所有列?
  • 呃,我是个白痴。当然,现在它可以工作了!非常感谢您的帮助:)
猜你喜欢
  • 1970-01-01
  • 2020-06-30
  • 1970-01-01
  • 1970-01-01
  • 2019-05-11
  • 1970-01-01
  • 1970-01-01
  • 2016-02-19
  • 2018-06-06
相关资源
最近更新 更多