我有一个像这样的值列表
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
行
感谢。
答案 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)