python列表和文件保存的问题

python列表和文件保存的问题,python,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:

我真的不知道为什么我的代码没有将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)
这是一个名为“cord+adc.txt”的文件:

如果有其他方法来编写我的代码,请告诉我,或者直接指出上面代码中的错误


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

您的示例缺少对象的初始化,
MDM
。确保已将其正确设置为适当的地址,代码如下:

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

如果
MDM
没有引用TCP套接字,您仍然可以尝试以交互方式调用上述方法。

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

您的示例缺少对象的初始化,
MDM
。确保已将其正确设置为适当的地址,代码如下:

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

如果
MDM
没有引用TCP套接字,您仍然可以尝试以交互方式调用上述方法。

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

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

我看不到您在任何地方关闭文件。将此添加为代码的最后一行:

f.close()

这将有助于解决您的问题。我不知道;我对套接字等不太了解,因此我无法帮助您。

我看不到您在任何地方关闭文件。将此添加为代码的最后一行:

f.close()

这将有助于解决您的问题。我不知道;我对套接字等不太了解,因此我无法帮助您。

您有两个问题,您没有关闭文件。程序中有一个更大的问题,尽管
while
循环将永远运行(或者直到程序中出现其他错误),但没有终止条件。您在1时循环,但从未明确地打破循环。我假设当函数
AcquiredPosition()时
返回一个空字符串您希望循环终止,因此我在调用函数后添加了代码
如果不是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)

这里有两个问题,您没有关闭文件。程序中有一个更大的问题,尽管
while
循环将永远运行(或者直到程序中出现其他错误),但没有终止条件。您在1时循环,但从未明确地打破循环。我假设当函数
AcquiredPosition()时
返回一个空字符串您希望循环终止,因此我在调用函数后添加了代码
如果不是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)

当您将一行写入文件时,它实际上首先被缓冲到内存中(这是处理文件的C方式)。当达到缓冲区的最大大小或关闭文件时,缓冲区将清空到指定的文件中


从目前为止的解释来看,我认为你得到了文件操纵的可怕形象。现在,解决所有问题的最佳方法是将缓冲区的内容刷新到文件中(这意味着在执行flush()函数且缓冲区为空后,您可以将所有内容安全地保存到文件中)。当然,关闭文件也是件好事,但在无限循环中这几乎是不可能的(您可以硬编码一个事件,将其发送到实际函数,当无限循环停止时-关闭程序-也关闭文件;只是对cource的建议,刷新()事情应该这样做。

当您将一行写入文件时,它实际上首先缓冲到内存中(这是处理文件的C方式)。当达到缓冲区的最大大小或关闭文件时,缓冲区将清空到指定的文件中


从目前为止的解释来看,我认为你得到了文件操纵的可怕形象。现在,解决所有问题的最佳方法是将缓冲区的内容刷新到文件中(这意味着在执行flush()函数且缓冲区为空后,你将所有内容安全地保存到文件中).Of cource关闭文件也是一件好事,但在无限循环中这几乎不可能(您可以硬编码一个事件,将其发送到实际函数,当无限循环停止时-关闭程序-也关闭文件;只是cource的一个建议,刷新()事情应该这样做。

对于初学者来说,代码缩进被破坏了。对于初学者来说,代码缩进被破坏了。嗨,inspectorG4dget,我如何完成循环,它是一个无限循环。我不知道如何\在哪里添加f.close()。相反,将f.flush()放在writelines调用之后。嗨,我不知道f.flush()将用于什么