作者FamilyMart (全家是你家)
看板Python
标题[问题] readline() 资料中遇到"\n"
时间Wed Feb 21 22:16:15 2018
新手上路 一直在这个问题点上无法突破
试过我能想到的方法 但是一直在一个轮回里面 无法突破
个人专题需要和别的系统沟通
也就是我传 \x04\x05\xaf.... 这样的资料格式
透过系统回传给我的 \x32\x85\xaa..... 来做确认资料有没有更新
主要我是透过 ser.readline() 将一整个资料读进来
判断最後三笔是否为 \0x60\0x00\x86 86为 CRC 验证码
在偶然间我发现一个错误常发生 也就是 readline()时
回传的资料里 \xb4\x83\n 中间出现了 \n 因此
(回传资料 \x00\x03\xef\x98Pb\x10'\xb4\x83\n)
後面再透过 readline 一次又可以读到後面的漏掉的资料
(漏掉的资料 \x00\x00\x60\x00\xa2)
因为是偶然发生没有收到完整的资料状况
我有点想不透该如何去处理
我个人写法是
Rx = ser.readline()
Rx2 = binascii.b2a_hex(Rx)
Rx3 = str(Rx2)
Rx4 = hex(Rx3)
check = Rx4[-7:-3:1]
if check = "6000"
print("OK")
至於为什麽这样写 一直在转换型态 是因为每次出现什麽 Error code
我就硬查资料把它转到不会出现 Error 的状态
我已经查了也试了不少方法 但是已经搞到我自己都不知道在干嘛了
希望高手能给我一条绳子一个方向 让我爬出这个奇怪的坑洞
麻烦高手指点
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 36.231.35.115
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1519222578.A.141.html
1F:推 goldflower: 没很懂 不是while去readline到没东西就好吗@@? 02/21 22:49
我其实是想解决根本问题 readline 再 print 显示出来为 ascii
造成我处理资料上的困惑 而 readline 遇到 \n 就停止
但是我的 \n 是因为 ascii 造成的
我也不知道我问题卡在哪个环节
就一个盲点一直找不到 变得有点语无伦次 QQ
※ 编辑: FamilyMart (36.231.35.115), 02/21/2018 23:22:19
2F:→ WunoW: readline看到换行字元就认为资料到尾端了不是很正常吗 02/21 23:19
3F:→ WunoW: 你先确定readline是不是跟你讲的一样是读到"一整个资料" 02/21 23:22
我了解到 \n 是换行字元 但是实际上不是 是编码造成的
readline 可以读到一整个资料
偶尔会遇到接收到的资料 中间编码自动换成 \n
而造成资料不完整
只要再 readline 一次 就能把後面资料补上
※ 编辑: FamilyMart (36.231.35.115), 02/21/2018 23:27:45
4F:→ djshen: 不然资料应该读到哪里? 02/22 00:25
5F:→ uranusjr: 直接用 read 不就好了, 没有分行概念为什麽要 readline 02/22 00:27
6F:→ uranusjr: 希望你 Python 是自学的不然又多一个老师需要打断腿 02/22 00:28
还好我真的是自学的 不然真的会两条腿也不够打 XDDD
今天会用 read 试看看 想说对方一次丢出来 应该用 readline
7F:推 kaneson: data有被readline() 切断的现象基本上就要搭配while loop 02/22 01:08
8F:→ kaneson: , readline本身就是设计给读文字data专用的, 比较通用的 02/22 01:08
9F:→ kaneson: 做法是while loop 加 read 02/22 01:08
好的 感谢你
10F:→ s860134: 我的老师都很多条腿 02/22 01:30
※ 编辑: FamilyMart (36.231.35.115), 02/22/2018 08:05:30