我有一个有2列的csv文件。我只是想知道是否每个row[0]值都在某个row[1]中,如果是,就打印row。
csv文件中的项目:
COL1, COL2
1-A, 1-A
1-B, 2-A
2-A, 1-B
2565, 2565
51Bc, 51Bc
5161, 56
811, 65
681, 11
55, 3
3, 55代码:
import csv
doc= csv.reader(open('file.csv','rb'))
for row in doc:
if row[0] in row[1]:
print row[0]最终结果应该是:
1-A
1-B
2-A
2565
51Bc
55
3相反,它给了我:
1-A
2565
51Bc它打印这些数字,因为它们是并排的,但我需要它做的是获取COL1中的第一项,看看它是否在整个COL2列表中找到它,如果找到了,就打印它。不看它是不是在旁边,然后打印出来。
发布于 2014-09-03 02:50:24
当您说for row in doc时,它只获取一对元素并将它们放在row中。因此,row[1]不可能在任何时间点保存整个列。您需要执行初始循环以将该列作为列表,然后再次循环csv文件以进行比较。实际上,您可以将这两列存储在单独的列表中,并且只需打开文件一次。
import csv
doc= csv.reader(open('file.csv','rb'))
# Build the lists.
first_col = []
second_col = set()
for row in doc:
first_col.append(row[0])
second_col.add(row[1])
# Now actually do the comparison.
for item in first_col:
if item in second_col:
print item根据abarnert的建议,我们对第二列使用set()。set针对查找其中的值进行了优化,这就是我们对它所做的一切。list针对循环遍历每个元素进行了优化,这就是我们使用first_col所做的,所以这样做更有意义。
https://stackoverflow.com/questions/25630127
复制相似问题