示例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的区别的更多相关文章

  1. Python学习笔记015——文件file的常规操作之一(文本文件)

    1 什么是文件 文件是用于数据存储的单位 文件通常用来长期保存数据 读写文件是最常见的I/O操作.Python内置了读写文件的函数,用法和C是兼容的. 读写文件的功能都是由操作系统提供的,一般而言,操 ...

  2. Python学习笔记015——文件file的常规操作之三(标准输入输出文件)

    1 标准输入输出文件 在Python中,模块sys中含有标准的输入输出文件 sys.stdin     标准输入方法(一般是键盘) sys.stdout   标准输出方法(到显示器的缓冲输出) sys ...

  3. Python学习笔记015——汉字编码

    1 字符串的编码(encode)格式 GB2312   GBK   GB18030  UTF-8  ASCII 其中常用的编码格式有 国标系列:GB18030(GBK(GB2312)) (window ...

  4. Python学习笔记015——文件file的常规操作之四(输入重定向)

    windows命令提示符(cmd.exe)和Linux Shell(bash等)均可通过">"或”>>“将输出重定向.其中, ">"表示 ...

  5. Python学习笔记015——文件file的常规操作(二进制文件)

    有时候诸如图片.音乐等信息不是以文本的形式存储的,而是二进制文件格式存储的. 有时候很多信息不是以文本文件的形式存储的 很多时候,都需要用到二进制读取文件.毕竟很多信息不是以文本的形式存储.例如:图片 ...

  6. Python学习笔记015——序列(字节数组 bytearray)

    1 序列 常见的序列有:list   tuple  str  bytes(字节串)  bytearray 2 字节数组bytearray 可变的字节序列,相当于bytes的可变版本. 3 创建函数by ...

  7. Python学习笔记015——文件file的常规操作seek()及tell()

    1 seek() 1.1 概述 file.seek()用于将文件游标移动到文件的任意位置,便于对文件的当前位置(增.删.改.查)操作 1.2 语法 fileObject.seek(offset[, w ...

  8. python中read、readline、readlines的区别

    read直接读入整个文件,存成一个字符串变量 readline一行一行读入文件,所以说读取的文件可以大于内存,但是读取的速度很慢 readlines一次读取整个文件,存成一个列表,所以说也必须小于内存 ...

  9. python中read、readline和readlines的区别

    read        读取整个文件 readline    读取下一行 readlines   读取整个文件到一个迭代器以供我们遍历(读取到一个list中,以供使用,比较方便). 123.txt内容 ...

随机推荐

  1. 细聊MySQL的分区功能

    此篇主要介绍下MySQL的分区功能.我们分别从分区的概念.分区对于MySQL应用的优点.分区的类别及设置来和大家一起探讨下MySQL的分区. 什么是分区? MySQL在未启用分区功能时,数据库的单个表 ...

  2. C# 的三种序列化方法

    序列化是将一个对象转换成字节流以达到将其长期保存在内存.数据库或文件中的处理过程.它的主要目的是保存对象的状态以便以后需要的时候使用.与其相反的过程叫做反序列化. 序列化一个对象 为了序列化一个对象, ...

  3. Java基础(九):抽象类

    在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类. 抽象类除了不能实例化对象之外, ...

  4. 刚開始学习的人非常有用:纯struts框架实现用户登陆

    本人新手一枚.也在学习ssh.高手建议从struts2開始学起,所以我就先仅仅用struts2写了一个demo.能够有助于理解struts2在项目中的作用. 首先简单了解一下struts2 的MVC模 ...

  5. IT运维流程 — ITIL

    导读 在IT运维中,最有名也是最实用的流程就是ITIL.说到这里,我想大家都有过实施ITIL痛苦的经历,一定会有人说:我们没有办法实施ITIL. 问:ITIL是什么? 答:ITIL即IT基础架构库(I ...

  6. Cognos与Firefox的那些事

    最近怀着一颗好奇的心装了Win10系统,作为一个Coder,或多或少的这么久以来对于它的兼容性还是秉着一颗质疑的态度.但是一切事情都要敢于尝试,毕竟Win10的用户体验还是很好的.和预料的一样,问题马 ...

  7. Cognos开发图表乱码问题

    在此之前提到过在利用TR建模导入IQD数据源的时候遇到乱码的一种解决方案: http://www.cnblogs.com/wxjnew/p/3374029.html 今天说的是在RS中开发新报表的时候 ...

  8. Android实现固定头部信息,挤压动画(相似通讯录)

    半年前,那时候我还是个大四的学生,每天都在找工作度过,想去北京体验一下蚁族生活,奋然离开了济南,哎...在济南我们学校还是数得着的好学校,去了北京就什么都不是了,一切的辛酸仅仅有自己知道,那时候的我仅 ...

  9. Jquery attr("checked") 返回checked或undefined 获取选中失效

    $('#cb').attr('checked'); 返回的是checked或者是undefined,不是原来的true和false了,有关此问题的解决方法如下: <input type='che ...

  10. maven下载源代码,解决中文注释为乱码的问题

    通过maven下载源代码,直接通过eclipse浏览源代码时,发现中文注释为乱码的问题.其实这个eclipse默认编码造成的问题.可以通过以下方法解决: 1.修改Eclipse中文本文件的默认编码:w ...