免责声明:我是一个完全的 Python n00b,从来没有用 Python 写过任何东西,我已经多年没有编程过任何东西,我最后学习的语言是 Visual Basic 6。所以请耐心等待!
所以我有一个 Android 应用程序,它通过 UDP 将我手机的传感器(加速度计、磁铁、光等)数据传输到我的 Windows PC,我有一个 Python 3.3 脚本来在屏幕上显示该数据,并将其写入 CSV:
#include libraries n stuff
import socket
import traceback
import csv
#assign variables n stuff
host = ''
port = 5555
csvf = 'accelerometer.csv'
#do UDP stuff
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
s.bind((host, port))
#do CSV stuff
with open(csvf, 'w', newline='', encoding='ascii') as csv_handle:
csv_writer = csv.writer(csv_handle, delimiter=',')
while 1:
try:
message, address = s.recvfrom(8192)
print(message) #display data on screen
csv_writer.writerow(message) #write data to CSV
except(KeyboardInterrupt, SystemExit):
raise
except:
traceback.print_exc()
屏幕上的数据看起来像这样,这是正确的:
b'7407.75961, 3, 0.865, 1.423, 9.022, 5,
CSV 文件中的数据看起来像数据的 ASCII 代码的数值(注意:代码与上面不匹配,因为数据略有不同):
57,48,48,50,46,54,51,57,57,57,44,32,51,44,32,32,32,48,46,53,52,57,44,32,32,53,46,54,56,56,44,32,32,56,46,51,53,53
我怎样才能让我的 CSV 只写 UDP 套接字正在接收的字符串?如您所见,我尝试添加“encoding='ascii'”,但这与省略它并没有什么区别。