python列表和文件保存的问题

2024-09-29 23:21:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我真的不知道为什么我的代码没有把adc和gps接收器的读数保存到我已经在代码的第一行打开的文件中。它只保存来自adc和gps接收机的一条记录。在

这是我的代码:

import MDM

f = open("cord+adc.txt", 'w')

def getADC():
  res = MDM.send('AT#ADC?\r', 0) 
  res = MDM.receive(100)
  if(res.find('OK') != -1):
    return res
  else:
    return ""

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):
  cordlist = []
  adclist = []
  p = AcquiredPosition()
  res = MDM.receive(60)
  cordlist.append(p)
  cordlist.append("\r\n")
  f.writelines(cordlist)
  q = getADC()
  res = MDM.receive(60)
  adclist.append(q)
  adclist.append("\r\n")
  f.writelines(adclist)

这是一个叫做“绳索”的文件+adc.txt文件“:

^{pr2}$

如果有其他方法来写我的代码,请告诉我或只是指出我的错误在上面的代码。在

谢谢你的建议


Tags: 文件代码txtreturndefrestmpgps
3条回答

因为您从未显式flush()或close()文件,因此无法保证文件中会出现什么结果。您可能应该在每个包之后刷新()它,并且当您希望程序退出时,必须显式地关闭()它。在

你有两个问题,你不能关闭你的文件。在你的程序中有一个更大的问题,尽管你的while循环将永远运行(或者直到你的程序中出现其他问题为止),但没有终止条件。您在1时循环,但从未显式脱离循环。我假设当函数AcquiredPosition()返回一个空字符串时,你希望循环终止,所以我在调用函数之后添加了代码if not p: break,如果它返回一个空字符串,那么循环将终止文件,这要归功于with声明。你应该重新构造while循环,如下所示:

with open("cord+adc.txt", 'w') as f:
    while (1):
        cordlist = []
        adclist = []
        p = AcquiredPosition()
        if not p:
            break
        res = MDM.receive(60)
        cordlist.append(p)
        cordlist.append("\r\n")
        f.writelines(cordlist)
        q = getADC()
        res = MDM.receive(60)
        adclist.append(q)
        adclist.append("\r\n")
        f.writelines(adclist)

如果调制解调器连接是socket, 通过直接从交互式解释器调用getADC()AcquiredPosition()来确保套接字正常工作。只需删除函数中的while(1)循环(main()是常见的做法),然后从交互式提示符导入模块。在

您的示例缺少^{}对象MDM的初始化。确保它正确设置到适当的地址,代码如下:

import socket
MDM = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
MDM.connect((HOST, PORT))

如果MDM没有引用TCP套接字,您仍然可以尝试交互式地调用所提到的方法。在

相关问题 更多 >

    热门问题