Discuss / Python / 关于read(size)请教

关于read(size)请教

Topic source

Gin阿金

#1 Created at ... [Delete] [Delete and Lock User]

多出读到read(size),size为读取的字节数,但是实际验证下来并非如此 验证结论:size在rb模式打开的情况为字节数,在普通模式(文本模式)打开的情况下为文本字符数

不是是否正确

###read(count)的理解

###普通模式(文本模式)打开 with open('E:\学习\数据分析\Python\利用python进行数据分析\read.txt', 'r') as a_r: a_top10 = a_r.read(10) #读取部分内容,具体数值的含义为需要讨论的点 a_r.seek(0) #句柄重置至初始位置,否则下一步将从当前句柄位置读取 a_whole = a_r.read() #读取全部内容 print('r_read(10):',a_top10) print('r_read(10).encode:', a_top10.encode('ANSI')) #此处txt编码模式为ANSI,将文本模式下的read(10)编码为二进制,用于与下文对比 print('r_readwhole:',a_whole) #打印内容

print('\n')

###二进制模式打开 with open('E:\学习\数据分析\Python\利用python进行数据分析\read.txt', 'rb') as a_rb: a_top10 = a_rb.read(10) #读取部分内容,具体数值的含义为需要讨论的点 a_rb.seek(0) #句柄重置至初始位置,否则下一步将从当前句柄位置读取 a_whole = a_rb.read() #读取全部内容 print('rb_read(10):',a_top10) print('rb_read(10).decode:', a_top10.decode('ANSI')) print('rb_readwhole:',a_whole)#打印内容

#运行结果:

r_read(10): 人的一切痛苦本质上都 r_read(10).encode: b'\xc8\xcb\xb5\xc4\xd2\xbb\xc7\xd0\xcd\xb4\xbf\xe0\xb1\xbe\xd6\xca\xc9\xcf\xb6\xbc' r_readwhole: 人的一切痛苦本质上都是对自己无能的愤怒

rb_read(10): b'\xc8\xcb\xb5\xc4\xd2\xbb\xc7\xd0\xcd\xb4' rb_read(10).decode: 人的一切痛 rb_readwhole: b'\xc8\xcb\xb5\xc4\xd2\xbb\xc7\xd0\xcd\xb4\xbf\xe0\xb1\xbe\xd6\xca\xc9\xcf\xb6\xbc\xca\xc7\xb6\xd4\xd7\xd4\xbc\xba\xce\xde \xc4\xdc\xb5\xc4\xb7\xdf\xc5\xad'

可见若不论什么模式下,size都为字符数,那么r_read(10).encode与rb_read(10)应该相同,r_read(10)与rb_read(10).decode应该相同,rb_read(10).decode比r_read(10)少一半字符,是由于ANSI编码中一个中文占两个字节


  • 1

Reply