2015-05-12 1 views
0

Я действительно новичок в 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 вызывает эту проблему. Буду признателен за любые предложения и благодарю вас заранее.

+0

Что такое to_write печать список или кортеж? – Ajay

+0

вам нужно отложить свой 'f.close()', так как прямо сейчас вы не закрываете ни один из ваших файлов, кроме вашего последнего файла (лучше использовать оператор 'with' в вашем цикле). – Scironic

+0

to_write печатает кортежи один за другим для каждой остановки в маршруте водителя. Я пробовал различные отступы на f.close() и не менял выход. «Разрыв» печатается в правильном порядке, поэтому я предположил, что закрытие выполняется в нужное время. – roganjosh

ответ

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.

+0

Отлично, спасибо! – roganjosh