Как добавить чтение в список питонов? - PullRequest
0 голосов
/ 18 ноября 2009

Я использую модуль GM862, и я хочу написать кординаты, как они есть в файле "cordinates.txt", но я получаю некоторую ошибку, это код, который я написал:

import MDM

cordlist = []
f = open("cordinates.txt", 'w')

def AcquiredPosition():
  res = MDM.send('AT$GPSACP\r', 0) 
  res = MDM.receive(30)
  if(res.find('OK') != -1):
    tmp = res.split("\r\n")
    res = tmp[1]
    tmp = res.split(" ")
    return tmp[1]
  else:
    return ""

while (1):
    res = MDM.receive(60)
    p = AcquiredPosition()
    cordlist.append(p)
    cordlist.append("\r\n")
    f.writelines(cordlist)

так что проблема в том, что кординаты повторяются в списке каждый раз, когда происходит добавление.

и это пример содержимого файла, называемого «cordinates.txt»:

160439.246,2612.7206N,05027.6068E,3.0,23.6,2,339.34,4.21,2.27,181109,03     first time
160439.246,2612.7206N,05027.6068E,3.0,23.6,2,339.34,4.21,2.27,181109,03     repeted1
160445.246,2612.7305N,05027.6079E,3.0,23.6,2,161.61,6.37,3.43,181109,03     first time
160439.246,2612.7206N,05027.6068E,3.0,23.6,2,339.34,4.21,2.27,181109,03     repeted2
160445.246,2612.7305N,05027.6079E,3.0,23.6,2,161.61,6.37,3.43,181109,03     repeted1
160451.246,2612.7634N,05027.5939E,3.0,23.6,2,143.18,1.36,0.73,181109,03     first time
160439.246,2612.7206N,05027.6068E,3.0,23.6,2,339.34,4.21,2.27,181109,03     repeted3
160445.246,2612.7305N,05027.6079E,3.0,23.6,2,161.61,6.37,3.43,181109,03
160451.246,2612.7634N,05027.5939E,3.0,23.6,2,143.18,1.36,0.73,181109,03
160458.246,2612.7471N,05027.5979E,3.0,23.6,2,333.97,7.66,4.13,181109,03
160439.246,2612.7206N,05027.6068E,3.0,23.6,2,339.34,4.21,2.27,181109,03     and so on...
160445.246,2612.7305N,05027.6079E,3.0,23.6,2,161.61,6.37,3.43,181109,03
160451.246,2612.7634N,05027.5939E,3.0,23.6,2,143.18,1.36,0.73,181109,03
160458.246,2612.7471N,05027.5979E,3.0,23.6,2,333.97,7.66,4.13,181109,03
160504.246,2612.7496N,05027.5961E,3.0,47.2,3,316.66,3.16,1.70,181109,04
160439.246,2612.7206N,05027.6068E,3.0,23.6,2,339.34,4.21,2.27,181109,03
160445.246,2612.7305N,05027.6079E,3.0,23.6,2,161.61,6.37,3.43,181109,03
160451.246,2612.7634N,05027.5939E,3.0,23.6,2,143.18,1.36,0.73,181109,03
160458.246,2612.7471N,05027.5979E,3.0,23.6,2,333.97,7.66,4.13,181109,03
160504.246,2612.7496N,05027.5961E,3.0,47.2,3,316.66,3.16,1.70,181109,04
160510.000,2612.7446N,05027.5996E,3.0,53.7,3,162.56,0.50,0.27,181109,04

спасибо за любую помощь.

Ответы [ 3 ]

3 голосов
/ 18 ноября 2009

Вы добавляете в свой список, а затем каждый раз записываете полный список в файл.

Необходимо очищать список при каждом проходе цикла.

Поставьте cordlist = [] в качестве первой строки под while(1)

2 голосов
/ 18 ноября 2009

Почему бы не открыть файл в режиме добавления («a» вместо «w») и просто указать на это?

0 голосов
/ 18 ноября 2009

Потому что это то, что вы просили это сделать. На каждой итерации вы добавляете элемент в список, а затем записываете все строки. Поэтому каждый раз вы будете повторять все, что уже сделали, плюс одну новую строку.

Поскольку ваша функция возвращает только одну строку, я не знаю, зачем вам вообще нужен список - просто запишите результат функции прямо в файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...