Python,.csv读取特定列的匹配行

时间:2017-01-21 13:13:33

标签: python csv

我有一个像这样的值列表

ids = [1, 2, 3, 4, 6]

我有一个.csv文件,其中包含以下数据

ID    Amount    Address
1     5.1       oergbe
3     2.4       oabvae
5     1.8       vuvuow

我可以打开.csv并阅读专栏[0]

with open(filename, 'rb') as NN:
    reader = csv.reader(NN)
    reader.next()
    for row in reader:
        for (i,v) in enumerate(row):
            columns[i].append(v)

csv_ids = (columns[0])

我可以找到匹配

match_ids = set(ids).intersection(csv_ids)

所以现在match_ids = [1,3]然后如何拉列[1]金额和列[2]地址,仅适用于match_ids

感谢。

2 个答案:

答案 0 :(得分:0)

如果我理解正确,您只希望ID为ids的行,而您只需要Amount列和Address

如果是这样,则此代码执行此操作:

import csv

ids = [1, 2, 3, 4, 6]
filename = 'data.csv'
result = []
with open(filename, 'rb') as NN:
    reader = csv.reader(NN)
    reader.next()
    for id, amount, address in reader:
        if int(id) in ids:
            columns.append((amount,address))

print(result)

输出:

[('5.1', 'oergbe'), ('2.4', 'oabvae')]

注意:csv解析仅在csv看起来像这样时(在您的示例中,您有空格,除非您向csv.reader调用添加一些选项,否则这将无效:

ID,Amount,Address
1,5.1,oergbe
3,2.4,oabvae
5,1.8,vuvuow

现在这是set的列表,您可能需要dict的列表。

答案 1 :(得分:0)

我建议采用一种简单的方法,即保留ids中第一项存在的行。作为一种更优雅的方式,您可以使用字典来保存它们:

final_result = {}
with open(filename, 'rb') as NN:
    reader = csv.reader(NN)
    reader.next()
    for id_, amount, address in reader:
        if id_ in ids:
            final_result.setdefault('amount', []).append(amount)
            final_result.setdefault('address', []).append(address)