我试图遍历2个CSV文件的每一行。如果两个文件中都有相同的lat和lon字段,我想丢弃这一行。
我已尝试过以下
import numpy
f=numpy.genfromtxt('/wind/addandclaimwithinlatlon.csv', delimiter=',',
dtype=None, skiprows=0)
f1=numpy.genfromtxt('/wind/new_2011.csv',delimiter=",",dtype=None,skiprows=0)
final=[]
for row in f:
for row1 in f1:
if row[1]==row1[0] and row[2]==row1[1]:
print "duplicates"
else:
final.append([row[0],row[1],row[2]])
numpy.savetxt('/wind/addclaimwithinlatlonwithout2011.csv',
final, delimiter=',', fmt='%s')
它不会失败,但它只运行很长时间并且不会产生任何输出。有什么问题?有没有其他方法可以更快地完成这项工作?
答案 0 :(得分:1)
由于您的文件已成功加载,因此问题似乎与您的代码有关。
因此,您可以使用itertools.zip_longest
(在python 2.X izip_longest
中)压缩文件,然后使用列表推导来保留预期的行,而不是多个索引和嵌套循环。
from itertools import zip_longest
import numpy
f=numpy.genfromtxt('/wind/addandclaimwithinlatlon.csv',delimiter=",",dtype=None,skiprows=0)
f1=numpy.genfromtxt('/wind/new_2011.csv',delimiter=",",dtype=None,skiprows=0)
final=[row for row,row1 in zip_longest(f,f1) if len(row)>3 and len(row1)>1 and row[1:3]!=row1[:2]]
请注意,您可以使用一个切片,而不是使用多个索引来比较row[1],row[2]
和row1[0],row[1]
。
答案 1 :(得分:0)
导入numpy 来自itertools import izip_longest F = numpy.genfromtxt( '/风/ addandclaimwithinlatlon.csv',分隔符= “”,D型细胞=无,skiprows = 0) F1 = numpy.genfromtxt( '/风/ new_2011.csv',分隔符= “”,D型细胞=无,skiprows = 0) 最后= [] 对于行,izip_longest中的row1(f,f1): ROW2 =名单(行) #LAT = ROW2 [1] #LON = ROW2 [2] 如果row2 [1:3] .all()== row1 [:2] .all(): 打印“dup” 其他: final.append(行)
numpy.savetxt('/ wind / addclaimwithinlatlonwithout2011.csv',final,delimiter =“,”,fmt ='%s')
现在仍在使用。错误。 List对象没有属性'all' 即使我将每个列分配为不同的变量,它也表示非类型对象不是可订阅的