我使用googlemapsapi来检查两点之间的距离,为此,我有两个文件工人.csv以及作业.csv. 在
目标是了解工人在每项工作中的距离。在
如果有3个工作和2个工作,预期结果是:
worker1, job1
worker1, job2
worker2, job1
worker2, job2
worker3, job1
worker3, job2
但代码只返回作业的第一项:
^{pr2}$我相信错误在for
import googlemaps
import csv
gmaps = googlemaps.Client(key='TOKEN')
column_work = 0
column_job = 0
geo_worker = open('files/work.csv', 'r')
geo_job = open('files/job.csv', 'r')
out = open('files/output.csv', 'w', newline='')
try:
open_work = csv.reader(geo_worker)
open_job = csv.reader(geo_job)
write = csv.writer(out)
for row in list(open_job)[1:]:
location_job = row[column_job]
for row in list(open_work)[1:]:
location_work = row[column_work]
distance = gmaps.distance_matrix(location_work, location_job)
print(distance)
finally:
geo_worker.close()
geo_job.close()
out.close()
我还想得到表格格式的结果,在输出.csv以下模板中的文件:
worker1, distance(1,1), distance(1,2)
worker2, distance(2,1), distance(2,2)
worker3, distance(3,1), distance(1,2)
在将文件作为生成器处理时,一个非常常见的错误(实际上就是您正在做的),就是不要认为文件一旦被读取就会耗尽。也就是说,open_work数据只适用于第一个作业。在
该问题最常见的解决方案是首先将文件内容读入数据结构,然后重新使用该结构以使数据可用。因此,您必须引入一个额外的读循环。在
此外,要重新排列输出,需要将完整的解决方案存储在数据结构中,然后重新排列。因此,您需要一个循环来构建结构,一个循环用于打印。因此,您需要总共三个循环来解决这个问题。这可以解决为:
由于我不知道您的csv文件的结构,我不完全确定这个解决方案是否满足您的需要,但至少它应该让您走上正确的道路。在
相关问题 更多 >
编程相关推荐