Я действительно новичок в Python, но работаю над проблемой коммивояжера с несколькими драйверами. В настоящее время я обрабатываю маршруты как список списков, но у меня возникают проблемы с получением результатов в подходящем формате .txt. Каждый под-список представляет местоположения для посещения драйвера, что соответствует отдельному списку lat/long кортежей. Что-то вроде:Написание списков в списке списков для разметки текстовых файлов
driver_routes = [[0,5,3,0],[0,1,4,2,0]]
lat_long =[(lat0,long0),(lat1,long1)...(latn,longn)]
То, что я хотел бы отдельный .txt файл (с именем «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()
Итак, я взял автоматический именование файлов код от Криса 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 вызывает эту проблему. Буду признателен за любые предложения и благодарю вас заранее.
Что такое to_write печать список или кортеж? – Ajay
вам нужно отложить свой 'f.close()', так как прямо сейчас вы не закрываете ни один из ваших файлов, кроме вашего последнего файла (лучше использовать оператор 'with' в вашем цикле). – Scironic
to_write печатает кортежи один за другим для каждой остановки в маршруте водителя. Я пробовал различные отступы на f.close() и не менял выход. «Разрыв» печатается в правильном порядке, поэтому я предположил, что закрытие выполняется в нужное время. – roganjosh