我是Python的新手,但发现自己正在研究多个驱动程序的旅行商问题。目前我将路由作为列表列表处理,但我无法以合适的.txt格式获取结果。每个子列表表示驱动程序要访问的位置,这对应于纬度/长度元组的单独列表。类似的东西:
driver_routes = [[0,5,3,0],[0,1,4,2,0]]
lat_long =[(lat0,long0),(lat1,long1)...(latn,longn)]
我想要的是一个单独的.txt文件(名为“Driver(n)”),它列出了要访问的驱动程序的纬度/经度。
当我刚刚使用单个驱动程序时,以下代码对我来说很好用:
optimised_locs = open('Optimisedroute.txt', 'w')
for x in driver_routes:
to_write = ','.join(map(str, lat_long[x]))
optimised_locs.write(to_write)
optimised_locs.write("\n")
optimised_locs.close()
所以,我在这里(Printing out elements of list into separate text files in python)从Chris Gregg那里获取了自动文件命名代码,并尝试为子列表创建一个迭代循环:
num_drivers = 2
p = 0
while p < num_drivers:
for x in driver_routes[p]:
f = open("Driver"+str(p)+".txt","w")
to_write = ','.join(map(str, lat_long[x]))
print to_write # for testing
f.write(to_write)
f.write("\n")
f.close()
print "break" # for testing
p += 1
我的屏幕上的输出看起来与我期望它的外观完全相同,我生成了具有正确名称的.txt文件。但是,我只是在每个文件中打印一个元组,而不是我期望的列表。它可能非常简单,但我不明白为什么while循环会导致这个问题。我将不胜感激任何建议,并提前感谢您。
答案 0 :(得分:0)
在f
循环的每次迭代中,您都会覆盖文件for
的内容,因为您正在重新打开它。您只需按如下方式修改代码,即可为每个驱动程序打开一次文件:
while p < num_drivers:
f = open("Driver"+str(p)+".txt","w")
for x in driver_routes[p]:
to_write = ','.join(map(str, lat_long[x]))
print to_write # for testing
f.write(to_write)
f.write("\n")
f.close()
p += 1
请注意,打开f
会移到for
循环之外。