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

Writing sublists in a list of lists to separate text files

我是 Python 的新手,但发现自己正在处理多个 driver 的旅行商问题。目前我将路由作为列表列表处理,但我无法以合适的 .txt 格式获取结果。每个 sub-list 代表 driver 访问的位置,对应于一个单独的 lat/long 元组列表。类似于:

driver_routes = [[0,5,3,0],[0,1,4,2,0]]
lat_long =[(lat0,long0),(lat1,long1)...(latn,longn)]

我想要一个单独的 .txt 文件(名为“Driver(n)”),其中列出 driver 访问的 lat/long 对。

当我只使用单个 driver 时,以下代码对我来说工作正常:

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()

所以,我从 Chris Gregg 那里获取了自动文件命名代码 (Printing out elements of list into separate text files in python) 并尝试为子列表创建一个迭代循环:

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

您在 for 循环的每次迭代中都覆盖了文件 f 的内容,因为您正在重新打开它。您只需按如下方式修改代码即可为每个驱动程序打开一次文件:

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