【问题标题】:Python: Compare lines in a CSV and append portions of the line to earlier rowsPython:比较 CSV 中的行并将行的部分附加到前面的行
【发布时间】:2014-10-11 23:03:29
【问题描述】:

我有一个 CSV 文件,其中列出了单笔交易的多条记录。每个事务都有一个可能出现在 2 到 16 行中的任何位置的 ID。每行都有一个对该行唯一的字段(信息)。下面是一个简化的数据集。我试图弄清楚如何将 CSV 的第一行读入一个新文件,然后检查第二行。如果两个 [0] 字段匹配,我将获取我需要的字段并将它们附加到第一行,然后检查下一行的 [0]。如果 [0] 字段不匹配,它需要是新闻文件中的新行,然后我开始根据该行的 [0] 值检查 [0] 字段。

输入数据

0987, A, info1, apple
0987, A, info2, apple
0987, B, info3, apple
0987, B, info4, apple
0987, B, info5, apple
0765, A, info6, orange
0765, A, info7, orange
0765, B, info8, orange
0589, A, info9, apple
0589, B, info10, apple

我需要什么:

0987, info1, info2, apple, info3, info4, info5
0765, info6, info7, orange, info8
0589, info9, apple, info10

我也可以在第一个行的末尾附加相关行的解决方案,因为我知道我可以如何通过并将我需要的字段切出到一个新文件中。它确保我得到了正确的行组合,这让我很难过——这可能意味着它非常简单,而且我已经盯着这个看太久了。

【问题讨论】:

  • 使用字典,将 csv 文件读入数组,使用输入数组中的第一个索引值作为字典键,字典值将是包含在该键下找到的所有关键字的数组。您还没有提供任何代码.. 无法帮助您进一步感谢
  • 构建字典,键为数字,值列表(或设置,如果你想要唯一的项目),你从你的 csv 追加/添加第三个和第四个元素。 collections.defauldict 可能会帮助您避免使用keyError
  • 谢谢 - 这让我指出了正确的方向。我知道这将是我所缺少的一些简单的东西。

标签: python csv


【解决方案1】:

我认为最好的方法是使用defaultdict(set)

from collections import defaultdict

info = defaultdict(set)
with open('data.txt', 'r') as f:
    for line in f:
        name, _, *props = line.split()
        info[name].update(props)

for k in info:
    print(k, info[k])

或者,您可以使用:

而不是 name, _, *props = line.split()
l = line.split()
name, props = l[0], l[2:]

对于 Python 2。

【讨论】:

  • 'name, _, *props = line.split()' 的语法错误
  • 那么你可能使用的是 python 2。这是使用 python 3 运行的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-26
  • 2023-02-06
  • 2016-05-23
  • 2020-11-07
相关资源
最近更新 更多