Python学习笔记015——readline与readlines的区别
示例1
读取同样一个文件binary_read_1.txt。
春眠不觉晓,处处闻啼鸟。 夜来风雨声,花落知多少。
其中该文件内容被下段代码读出(注意,这里是采用的readlines)
f = open("binary_output_1.txt", 'rb')
b = f.readlines()  #b 绑定资源句柄  字节串
if type(b) == str:
    print("b是字符串")
elif type(b) == bytes:
    print("b是字节串")
else:
    print("b是其它类型")
print(b)
f.close()
运行结果:
b是其它类型 [b'\xe6\x98\xa5\xe7\x9c\xa0\xe4\xb8\x8d \xe8\xa7\x89\xe6\x99\x93\xef\xbc\x8c\xe5 \xa4\x84\xe5\xa4\x84\xe9\x97\xbb\xe5\x95 \xbc\xe9\xb8\x9f\xe3\x80\x82\n', b'\xe5\xa4 \x9c\xe6\x9d\xa5\xe9\xa3\x8e\xe9\x9b\xa8 \xe5\xa3\xb0\xef\xbc\x8c\xe8\x8a\xb1\xe8 \x90\xbd\xe7\x9f\xa5\xe5\xa4\x9a\xe5\xb0 \x91\xe3\x80\x82\n']
运行结果是每段开始以b‘’包含字符串,形成字节串。原文件换行处以\n结尾。
如果该文件被下段代码读取(注意,这里是采用的readline)
f = open("binary_output_1.txt", 'rb')
b = f.readline()  #b 绑定资源句柄  字节串
if type(b) == str:
    print("b是字符串")
elif type(b) == bytes:
    print("b是字节串")
else:
    print("b是其它类型")
print(b)
f.close()
运行结果
b是字节串 b'\xe6\x98\xa5\xe7\x9c\xa0\xe4\xb8\x8d \xe8\xa7\x89\xe6\x99\x93\xef\xbc\x8c\xe5 \xa4\x84\xe5\xa4\x84\xe9\x97\xbb\xe5\x95 \xbc\xe9\xb8\x9f\xe3\x80\x82\n'
对比两个代码的运行结果:
readlines()显示的为非字节串,而readline()显示的为字节串,实际内容一致。
示例2
读取同样一个文件binary_read_2.txt。
ABCDEFabcdef012345 2
用下段代码读取
f = open("binary_output_2.txt", 'rb')
b = f.readlines()  #b 绑定资源句柄  字节串
if type(b) == str:
    print("b是字符串")
elif type(b) == bytes:
    print("b是字节串")
else:
    print("b是其它类型")
print(b)
f.close()
运行结果:
b是其它类型 [b'ABCDEFabcdef012345\n', b'\n']
若采用readline()读取
f = open("binary_output_2.txt", 'rb')
b = f.readline()  #b 绑定资源句柄  字节串
if type(b) == str:
    print("b是字符串")
elif type(b) == bytes:
    print("b是字节串")
else:
    print("b是其它类型")
print(b)
f.close()
运行结果
b是字节串 b'ABCDEFabcdef012345\n'
为什么readline()读取时为字节串,readlines()读取时为其他类型呢?
因为当readline()读取时,将原文件行内容进行了转换,以b''形式将其转变成字节串形式;
当readlines()读取信息时,以换行符为结尾形成字节串,同时将字节串为元素组成列表,所以为其他形式
为什么应为字母和数字在转换字节串时直接输出,而汉字则时不能直接显示?
在字节串bytes中,当字节值超出ASCII字符范围内时,会以\x##形式显示字节流,其中三个\x##形式代表一个汉字
例如
>>> b'\xe6\x98\xa5'.decode('utf-8',errors="ignore")
'春'
详细信息可以参考廖雪峰博客的python-字符串和编码部分
Python学习笔记015——readline与readlines的区别的更多相关文章
- Python学习笔记015——文件file的常规操作之一(文本文件)
		1 什么是文件 文件是用于数据存储的单位 文件通常用来长期保存数据 读写文件是最常见的I/O操作.Python内置了读写文件的函数,用法和C是兼容的. 读写文件的功能都是由操作系统提供的,一般而言,操 ... 
- Python学习笔记015——文件file的常规操作之三(标准输入输出文件)
		1 标准输入输出文件 在Python中,模块sys中含有标准的输入输出文件 sys.stdin 标准输入方法(一般是键盘) sys.stdout 标准输出方法(到显示器的缓冲输出) sys ... 
- Python学习笔记015——汉字编码
		1 字符串的编码(encode)格式 GB2312 GBK GB18030 UTF-8 ASCII 其中常用的编码格式有 国标系列:GB18030(GBK(GB2312)) (window ... 
- Python学习笔记015——文件file的常规操作之四(输入重定向)
		windows命令提示符(cmd.exe)和Linux Shell(bash等)均可通过">"或”>>“将输出重定向.其中, ">"表示 ... 
- Python学习笔记015——文件file的常规操作(二进制文件)
		有时候诸如图片.音乐等信息不是以文本的形式存储的,而是二进制文件格式存储的. 有时候很多信息不是以文本文件的形式存储的 很多时候,都需要用到二进制读取文件.毕竟很多信息不是以文本的形式存储.例如:图片 ... 
- Python学习笔记015——序列(字节数组 bytearray)
		1 序列 常见的序列有:list tuple str bytes(字节串) bytearray 2 字节数组bytearray 可变的字节序列,相当于bytes的可变版本. 3 创建函数by ... 
- Python学习笔记015——文件file的常规操作seek()及tell()
		1 seek() 1.1 概述 file.seek()用于将文件游标移动到文件的任意位置,便于对文件的当前位置(增.删.改.查)操作 1.2 语法 fileObject.seek(offset[, w ... 
- python中read、readline、readlines的区别
		read直接读入整个文件,存成一个字符串变量 readline一行一行读入文件,所以说读取的文件可以大于内存,但是读取的速度很慢 readlines一次读取整个文件,存成一个列表,所以说也必须小于内存 ... 
- python中read、readline和readlines的区别
		read 读取整个文件 readline 读取下一行 readlines 读取整个文件到一个迭代器以供我们遍历(读取到一个list中,以供使用,比较方便). 123.txt内容 ... 
随机推荐
- 数学图形之莫比乌斯带(mobius)
			莫比乌斯带,又被译作:莫比斯环,梅比斯環或麦比乌斯带.是一种拓扑学结构,它只有一个面(表面),和一个边界.即它的正反两面在同一个曲面上,左右两个边在同一条曲线上.看它的名字很洋气,听它的特征很玄乎,实 ... 
- HDU2669 Romantic 扩展欧几里德 对我来说有陷阱
			这道题对我来说有陷阱虽说是赤果果的扩展欧几里德,看样子基本攻还是不够哈,基本功夫一定要好,准备每天上那种洗脑课时分 多看看数论书,弥补一下 自己 狗一样的基础, 这道题用到了一个性质: 对于不定整数 ... 
- 网站日志访问记录组件UserVisitLogsHelp开源了!
			之前在<一种基于自定义代码记录用户访问日志在Sharepoint网站的应用方法!>一文利用本人几年前的开发的UserVisitLogsHelp组件进行了网站用户访问日志记录,可用于网站分析 ... 
- 实现iframe窗口高度自适应的又一个巧妙思路
			domainA 中有一个页面index.html,通过iframe嵌套了domainB中的一个页面other.html由于other.html页面在iframe中显示,而且其页面内容会动态的增加或减少 ... 
- UVA 11464 Even Parity (独特思路)
			题意:有一个n*n的01矩阵,任务是把尽可能少的0变成1,使得每个元素的上.下.左.右元素之和为偶数. 思路:很容易想到的思路是枚举每个点是0还是1,因为n<=15,复杂度就是2^225显然TL ... 
- Linux上安装Bugzilla4.4小记
			因项目需要,我受命在一台Linux服务器上搭建一个Bugzilla,进过一天的调试,这项任务总算完成了.现在可以肯定的说,安装过程不复杂,基本就是解压,填参数,执行命令.Bugzilla要跑起来,本机 ... 
- C#.NET常见问题(FAQ)-get set属性有什么意义
			使用get,set可以让类定义的更加规范,因为正常情况下,如果我们写一个自定义类,他的属性要么是public,要么是private,但是如果public的属性又要做限制,比如人年龄不允许负数,也不允许 ... 
- C#.NET常见问题(FAQ)-SplitPanel如何设置上下和左右
			定位到Orientation属性即可 更多教学视频和资料下载,欢迎关注以下信息: 我的优酷空间: http://i.youku.com/acetaohai123 我的在线论坛: http: ... 
- Linux网卡高级命令
			网卡的高级命令 [root@gechong ~]# mii-tool No interface specified usage: mii-tool [-VvRrwl] [-A media,... | ... 
- 【转】Asp.Net MVC4 之Url路由
			MVC4常见路由的处理方式 //直接方法重载+匿名对象 routes.MapRoute( name: "Default", url: "{controller}/{act ... 
