在列表列表中写入子列表以分隔文本文件
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
循环之外。
我是 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
循环之外。