python的 read, readlines,readline 有何异同,读取文件的时候用哪个好?怎么选择。

先看是什么,再看怎么用。着急的话,可以看最后的一节。

开始前,先介绍一个小技巧:内置函数 repr(英文名representation)。开发调试用的,返回一个对象的字符串表示形式,包含对象的类型。
(函数str() 用于将值转化为适于人阅读的形式,而repr() 转化为供解释器读取的形式。)
举例:

    my_str = '你好\n'
    print(my_str.__str__())
    print(my_str.__repr__())

结果:

你好

'你好\n'

str 函数直接将‘\n’转义的结果打印了,看不到’\n’了,而 repr 函数的打印结果保留了字符串原始的样子,而且可以看出打印的是一个字符串类型。

接下来,我们也用 repr 这个函数来看看 read 函数的结果。为方便解释,我们的代码示例每次都读取整个文件。

文件内容:
在这里插入图片描述

read

read函数用于一次性读取整个文件的内容,并将其作为一个字符串返回。
如果不指定参数,则默认读取整个文件内容。
如果指定了参数size,则会读取指定大小的字符数。
读取完文件内容后,再次调用read函数将返回空字符串。

with open('running.log', 'r') as f:
    content = f.read()    
print(content)   
print(content.__repr__())

运行结果:
在这里插入图片描述
一般的print打印可以看到文件完整内容,而 read的结果上实际上是一个字符串,包含有文件每行的换行符’\n’,第2行开头的空格也会保留下来。

简单来说,read 函数就是将文件从头到尾一字不落地读取到一个字符串中。

readlines

readlines函数用于逐行读取文件内容,并将每行内容作为一个元素存储在列表中返回。
返回的列表中的每个元素对应文件中的一行文本

with open('running.log', 'r') as f:
    content = f.readlines()
print(content.__repr__())

运行结果:
在这里插入图片描述
显然,readlines 的结果是一个列表,每个元素就是文件一行的内容,同样也保留了空格。

简单来说,readlines 读取的也是整个文件一字不落的内容,只是按行存放在了列表中。方便按行取用。

readline

readline函数用于逐行读取文件内容,并返回当前行的内容。
每次调用readline函数,都会读取文件中的下一行。
当文件内容读取结束后,再次调用readline函数将返回空字符串。

with open('running.log', 'r') as f:
    print(f.readline().__repr__())

运行结果:
在这里插入图片描述
readline 一次调用只能读取一行,不能完整读取文件。

从名字就可以看出来,readline 就是 readlines 函数的子过程。

简单来说,就是读取文件的一行。
如果要完整读取,可以这样写:

with open('running.log', 'r') as f:
    for line in f:
        print(line.__repr__())

运行结果:
在这里插入图片描述

怎么选择?:

本质上来说,三者并没有区别,都能够完整读取文件内容,包括末尾的’\n’的等换行符。

差别在于返回类型和调用形式。

read 返回字符串类型,如果你需要用正则去查找一些东西,字符串是更好的选择。

readlines 返回列表类型,如果你需要读取完文件然后挑几行处理,或者逐行处理,就用它。(在 python 中是更常用的,无脑用。)

readline 返回的是字符串类型,如果你需要在读取文件的过程中就进行处理判断,不需要读完整个文件,用这个函数就比较合适。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/346012.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

GitLab入门指南:上传与下载操作一网打尽

GitLab简介: GitLab是一个基于Git的开源仓库管理系统,提供了一个Web界面的Git存储库管理器,并集成了多种开发工具的功能,如代码审查、问题跟踪、持续集成和持续部署等。GitLab可以在本地服务器上部署,也可以使用其提供…

spring mvc 请求与响应

我是南城余!阿里云开发者平台专家博士证书获得者! 欢迎关注我的博客!一同成长! 一名从事运维开发的worker,记录分享学习。 专注于AI,运维开发,windows Linux 系统领域的分享! 知…

Python批量采集亚马逊商品数据

嗨喽~大家好呀,这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 知识点: 爬虫基本流程 非结构化数据解析 开发环境: python 3.8 解释器, 运行代码 pycharm 随便 配置 python解释器 DrissionPage >>> p…

注解实现策略模式

代码结构如下 代码如下 Getter AllArgsConstructor public enum AuditPlutusEnum {BACK("回款"),REFUND("退款"),INVOICE("开票");private final String name; }Retention(RetentionPolicy.RUNTIME) Target(ElementType.TYPE) Component public…

深入解析与实践:基于VUE的axios异步请求应用指南

一、Ajax回顾 1、Ajax介绍 Ajax 是指一种创建交互式网页应用的开发技术。Ajax 异步 JavaScript 和 XML。 2、Ajax作用 Ajax 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新(局部更新)。传统…

ToDesk/向日葵的MAC远程鼠标控制不了?如何解决

不知道各位使用Mac电脑的小伙伴们,在日常进行跨设备远控操作时是否曾遇到过远程鼠标控制不了的问题?其实这是因为有项系统权限没有开设导致的,本篇文章木木小编就给大家逐步教学一下针对该问题如何解决才有效! 当通过ToDesk远程连…

【学网攻】 第(8)节 -- 端口安全

文章目录 【学网攻】 第(1)节 -- 认识网络【学网攻】 第(2)节 -- 交换机认识及使用【学网攻】 第(3)节 -- 交换机配置聚合端口【学网攻】 第(4)节 -- 交换机划分Vlan【学网攻】 第(5)节 -- Cisco VTP的使用​​​​​​【学网攻】 第(6)节 -- 三层交换机实现VLAN间路由【学网攻…

QQ云端机器人登录系统php源码

这款源码主要是针对群机器人爱好者的,这是一个通过对接挂机宝里面机器人框架的一个网页站点,用户通过网页登录 QQ 账号至挂机宝里面框架(可扫码登录、账密登录、跳转 QQ 快捷登录),无需通过机器人即可实现登录&#xf…

第二百八十六回

文章目录 概念介绍实现方法示例代码 我们在上一章回中介绍了如何拦截路由相关的内容,本章回中将介绍页面转场动画.闲话休提,让我们一起Talk Flutter吧。 概念介绍 我们在上一章回中介绍了路由拦截相关的内容,本章回中将使用路由拦截实现转场…

ZigBee学习——浅析协议栈

✨记录学习过程 文章目录 一、初识OSAL1.1 Z-Stack和Zigbee的OSAL是什么关系?1.2 OSAL可以解决Z-stack在不同厂商的芯片上的使用吗? 二、协议栈运行机制2.1 初始化涉及内容2.2 初始化过程 一、初识OSAL OSAL,全称是操作系统抽象层&#xff0…

详解Mockito

详解Mockito 1. Mockito简介 在我们的编程世界中,测试是一个非常重要的环节,它能帮助我们确保代码的质量和稳定性。而在众多的测试方法中,Mock测试是一种非常有效的手段。 1.1 什么是 Mock 测试 Mock测试,顾名思义,…

DS:顺序表的实现(超详细!!)

创作不易,友友们给个三连呗! 本文为博主在DS学习阶段的第一篇博客,所以会介绍一下数据结构,并在最后学习对顺序表的实现,在友友们学习数据结构之前,一定要对三个部分的知识——指针、结构体、动态内存管理的…

spring eureka集群相关问题

一、集群节点信息如何更新? EurekaServer节点启动的时候,DefaultEurekaServerContext.init()方法调用PeerEurekaNodes.start()方法,start方法中resolvePeerUrls()会从配置文件读取serviceUrl属性值获得集群最新节点信息,通过upda…

微软 AD 介绍 | 安全建议 | 防护

介绍: 什么是Active Directory(AD)? Active Directory 是由 微软开发的目录服务,用于存储和管理网络中的资源,如计算机、用户、组和其他网络对象。允许组织管理员轻松地管理和验证网络中的用户和计算机。 …

天津大数据培训班推荐,数据分析过程的常见错误

大数据”是近年来IT行业的热词,目前已经广泛应用在各个行业。大数据,又称海量信息,特点是数据量大、种类多、实时性强、数据蕴藏的价值大。大数据是对大量、动态、能持续的数据,通过运用分析、挖掘和整理,实现数据信息…

项目一:踏上Java开发之旅

文章目录 一、实战概述二、实战步骤任务1:安装配置JDK并开发第一个Java程序步骤一:安装JDK步骤二:配置JDK环境变量步骤三:开发第一个Java程序 课堂练习任务1、打印个人信息任务2、打印直角三角形任务3、打印一颗爱心任务4、打印史…

【jetson笔记】解决vscode远程调试qt.qpa.xcb: could not connect to display报错

配置x11转发 jetson远程安装x11转发 安装Xming Xming下载 安装完成后打开安装目录C:\Program Files (x86)\Xming 用记事本打开X0.hosts文件,添加jetson IP地址 后续IP改变需要重新修改配置文件 localhost 192.168.107.57打开Xlaunch Win菜单搜索Xlaundch打开 一…

论文阅读:Vary-toy论文阅读笔记

目录 引言整体结构图方法介绍训练vision vocabulary阶段PDF数据目标检测数据 训练Vary-toy阶段Vary-toy结构数据集情况 引言 论文:Small Language Model Meets with Reinforced Vision Vocabulary Paper | Github | Demo 说来也巧,之前在写论文阅读&…

Linux启动级别和密码问题文件

1、linux启动级别 如果安装的linux默认带的图形化界面,默认的运行级别为5 graphical.target 因为图形化太耗费资源了,想每次启动的时候,更改它的默认允许级别为命令行(文本) cat /etc/inittab 修改为命令行 多用户…

Springboot项目启动报错:Command line is too long问题解决

启动项目报错:Error running ‘xxxxxxxx’: Command line is too long. Shorten command line for ‘xxxxxxxx’ or also for Application default configuration 方法一 点击提示中的:default:然后在弹出窗口中选择:JAR xxxx xxx&#xff0…