[英]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
,你只需要列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
列表。
我建议一种简单的方法,保留他们的第一项存在于你的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.