【问题标题】:How to make equivalency in Python?如何在Python中进行等价?
【发布时间】:2015-02-26 04:35:25
【问题描述】:

对我来说是个难题,我有一个 2 列的 csv

4,8
5,64
6,12
7,54
8,2

...以及超过 50 个条目

还有一个带有一列的第二个 CSV(第一个 csv 中的第二列条目)。

我尝试从我的第一个 csv 中查找(并写入)相应的条目:

54,7
8,4
12,6
8,4
64,5
54,7
...

【问题讨论】:

  • 对不起,“等价”是什么意思?你能举一个“解决的”CSV的例子吗? (即最后一个例子中的“?”应该是什么?)
  • “等价”是什么意思?你能解释一下你的意思吗,或者一些例子也很有用。
  • 您是否要转置列?如果是这样,通过保持预期结果和实际结果之间的顺序,有助于更清楚地传达您的观点。
  • @Makoto 这正是我想要的;在我的示例中,我没有维护顺序,因为我无法更改顺序或重新组织 CSV 文件中的列。
  • 加载 A 的内容。将每一行用作字典,其中 B 是键,A 是值。将此应用于 B 中的数据。

标签: python csv


【解决方案1】:

好的...如果您有两个 csv 文件,而第二个文件有一列 B 值:

with open('test.csv') as f:
    line_values = [line.strip().split(',') for line in f.readlines()]
transposed_values = dict([(v.strip(), k) for k, v in line_values])
with open('test2.csv') as fi:
    with open('out.csv', 'w') as fo:
        for line in fi.readlines():
            B = line.strip()
            try:
                print >>fo, '{}, {}'.format(B, transposed_values[B])
            except KeyError:
                print >>fo, '{}, ?'.format(B)

输入文件,test.csv:

4, 8
5, 64
6, 12
7, 54
8, 2

输入文件,test2.csv:

54
8
12
8
64
54

输出文件,out.csv:

54, 7
8, 4
12, 6
8, 4
64, 5
54, 7

【讨论】:

  • 我不确定您所说的订单是什么意思。您是否有第二个包含一列的文件(第一个文件中的 B 条目)并且您想找到相应的 A 条目?
  • 是的@xnx,我的第二个文件只有一列(第一个文件中的 B 条目,但顺序不同),我尝试找到相应的 A 条目
【解决方案2】:

我不知道您从哪里获得要写入的 CSV 文件的 A 列,但我们假设这些值按顺序位于列表 As 中。那么:

import csv

d = {}
with open('toread.csv') as f:
    r = csv.reader(f)
    for a, b in r:
        d[b] = a

with open('towrite.csv', 'w') as f:
    w = csv.writer(f)
    for a in As:
        w.writerow(a, d[a])

【讨论】:

  • 如果存在具有不同a 的重复b 值,这将不起作用。
  • 当然,但这似乎与 OP 所表达的问题不兼容。
  • 同样的问题,我的第一个和第二个 CSV 的顺序不同
  • @Marco,不知道你所说的“同样的问题”是什么意思(和 what 一样?!) -- 你,或者有你不,完全尝试上面的代码(为文件使用适当的名称)加上你想要的设置为As(例如54, 8, 12, 8, 64, 54,基于你此时出现的Q)?
猜你喜欢
  • 1970-01-01
  • 2013-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-03
  • 2010-10-07
  • 2021-06-19
相关资源
最近更新 更多