2 回答

TA貢獻1830條經驗 獲得超3個贊
這似乎有效:
from itertools import product
def _CabFare(x,y,z):
with open(x, 'r') as f, open(y, 'r') as g, open(z, 'wb') as h:
writer = csv.writer(h)
for row_a, row_b in product(csv.reader(f), csv.reader(g)):
if _ManhattanDistance(row_a, row_b) > 0:
writer.writerow(row_a)
writer.writerow(row_b)
速度較慢,但內存占用較少:
def _CabFare(x,y,z):
with open(x, 'r') as f, open(z, 'wb') as h:
writer = csv.writer(h)
for row_a in csv.reader(f):
with open(y, 'r') as g:
for row_b in csv.reader(g):
if _ManhattanDistance(row_a, row_b) > 0:
writer.writerow(row_a)
writer.writerow(row_b)

TA貢獻1830條經驗 獲得超9個贊
reader是一個有狀態的迭代器。一旦你用盡它,它就完成了,你需要重新打開它才能再次迭代文件:
def _CabFare(x,y,z):
with open(x, 'r') as f:
with open(y, 'r') as g:
with open(z, 'wb') as h:
reader_2 = csv.reader(g)
writer = csv.writer(h)
for row_b in reader_2:
reader_1 = csv.reader(f) # Reopen reader_1 for each iteration
for row_a in reader_1:
if _ManhattanDistance(row_a,row_b) > 0:
writer.writerow(row_a)
writer.writerow(row_b)
添加回答
舉報