在列表列表中编写子列表以分隔文本文件

时间:2015-05-12 10:22:58

标签: python nested-lists

我是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循环会导致这个问题。我将不胜感激任何建议,并提前感谢您。

1 个答案:

答案 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循环之外。