繁体   English   中英

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

[英]Python, .csv read matching rows for specific columns

我有一个像这样的值列表

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

谢谢。

如果我理解正确的话,你只需要一个ID,其是在线路ids ,你只需要列AmountAddress

如果这是真的那么这段代码就是这样:

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列表。

我建议一种简单的方法,保留他们的第一项存在于你的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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM