读取文件

自学python如何成为大佬(目录):自学python如何成为大佬(目录)_利用python语言智能手机的默认语言实战一-CSDN博客

在Python中打开文件后,除了可以向其写入或追加内容,还可以读取文件中的内容。读取文件内容主要分为以下几种情况:

1  读取指定字符

文件对象提供了read()方法读取指定个数的字符,语法格式如下:

file.read([size])

参数说明:

l  file:为打开的文件对象。

l  size:可选参数,用于指定要读取的字符个数,如果省略,则一次性读取所有内容。

注意:在调用read()方法读取文件内容的前提是在打开文件时,指定的打开模式为r(只读)或者r+(读写),否则,将抛出如图11所示的异常。

图11  没有读取权限时抛出的异常

例如,要读取message.txt文件中的前9个字符,可以使用下面的代码:

with open('message.txt','r') as file:      # 打开文件

    string = file.read(9)                   # 读取前9个字符

    print(string)

如果message.txt的文件内容为:

你使用了1张加速卡,小鸡撸起袖子开始双手吃饲料,进食速度大大加快。

那么执行上面的代码将显示以下结果:

你使用了1张加速卡

使用read(size)方法读取文件时,是从文件的开头读取的。如果想要读取部分内容,可以先使用文件对象的seek()方法将文件的指针移动到新的位置,然后再应用read(size)方法读取。seek()方法的基本语法格式如下:

file.seek(offset[,whence])

参数说明:

l  file:表示已经打开的文件对象。

l  offset:用于指定移动的字符个数,其具体位置与whence参数有关。

l  whence:用于指定从什么位置开始计算。值为0表示从文件头开始计算,值为1表示从当前位置开始计算,值为2表示从文件尾开始计算,默认为0。

注意:对于whence参数,如果在打开文件时,没有使用b模式(即rb),那么只允许从文件头开始计算相对位置,从文件尾计算时就会抛出如图12所示的异常。

图12  抛出io.UnsupportedOperation异常

例如,想要从文件的第19个字符开始读取13个字符可以使用下面的代码:

with open('message.txt','r') as file:       # 打开文件

    file.seek(19)                            # 移动文件指针到新的位置

    string = file.read(13)                 # 读取13个字符

    print(string)

如果采用GBK编码的message.txt文件内容为:

你使用了1张加速卡,小鸡撸起袖子开始双手吃饲料,进食速度大大加快。

那么执行上面的代码将显示以下结果:

小鸡撸起袖子开始双手吃饲料

说明:在使用seek()方法时,如果采用GBK编码,那么offset的值是按一个汉字(包括中文标点符号)占两个字符计算,而采用UTF-8编码,则一个汉字占3个字符,不过无论采用何种编码英文和数字都是按一个字符计算的。这与read(size)方法不同。

场景模拟:在蚂蚁庄园的动态栏目中记录着庄园里的新鲜事。现在想显示庄园里的动态信息。

图标 (35)

  实例03  显示蚂蚁庄园的动态

在IDLE中创建一个名称为antmanor_message_r.py的文件,然后在该文件中,首先应用open()函数以只读方式打开一个文件,然后再调用read()方法读取全部动态信息,并输出,代码如下:

print("\n","="*25,"蚂蚁庄园动态","="*25,"\n")

with open('message.txt','r') as file:       # 打开保存蚂蚁庄园动态信息的文件

    message = file.read()              # 读取全部动态信息

    print(message)                    # 输出动态信息

    print("\n","="*29,"over","="*29,"\n")

执行上面的代码,将显示如图13所示的结果。

图13  显示蚂蚁庄园的全部动态

2  读取一行

在使用read()方法读取文件时,如果文件很大,一次读取全部内容到内存,容易造成内存不足,所以通常会采用逐行读取。文件对象提供了readline()方法用于每次读取一行数据。readline()方法的基本语法格式如下:

file.readline()

其中,file为打开的文件对象。同read()方法一样,打开文件时,也需要指定打开模式为r(只读)或者r+(读写)。

场景模拟:在蚂蚁庄园的动态栏目中记录着庄园里的新鲜事。现在想显示蚂蚁庄园里的动态信息。

图标 (35)

  实例04  逐行显示蚂蚁庄园的动态

在IDLE中创建一个名称为antmanor_message_rl.py的文件,然后在该文件中,首先应用open()函数以只读方式打开一个文件,然后应用while语句创建循环,在该循环中调用readline()方法读取一条动态信息并输出,另外还需要判断内容是否已经读取完毕,如果读取完毕应用break语句跳出循环,代码如下:

print("\n","="*35,"蚂蚁庄园动态","="*35,"\n")

with open('message.txt','r') as file:    # 打开保存蚂蚁庄园动态信息的文件

    number = 0                   # 记录行号

    while True:

        number += 1

        line = file.readline()

        if line =='':

            break                # 跳出循环

        print(number,line,end= "\n")      # 输出一行内容

print("\n","="*39,"over","="*39,"\n")

执行上面的代码,将显示如图14所示的结果。

图14  逐行显示蚂蚁庄园的全部动态

3  读取全部行

读取全部行的作用同调用read()方法时不指定size类似,只不过读取全部行时,返回的是一个字符串列表,每个元素为文件的一行内容。读取全部行,使用的是文件对象的readlines()方法,其语法格式如下:

file.readlines()

其中,file为打开的文件对象。同read()方法一样,打开文件时,也需要指定打开模式为r(只读)或者r+(读写)。

例如,通过readlines()方法读取实例03中的message.txt文件,并输出读取结果,代码如下:

print("\n","="*25,"蚂蚁庄园动态","="*25,"\n")

with open('message.txt','r') as file:              # 打开保存蚂蚁庄园动态信息的文件

    message = file.readlines()                  # 读取全部动态信息

    print(message)                               # 输出动态信息

    print("\n","="*29,"over","="*29,"\n")

执行上面的代码,将显示如图15所示的运行结果。

图15  readlines()方法的返回结果

从该运行结果中可以看出readlines()方法的返回值为一个字符串列表。在这个字符串列表中,每个元素记录一行内容。如果文件比较大时,采用这种方法输出读取的文件内容会很慢。这时可以将列表的内容逐行输出。例如,下面的代码可以修改为以下内容。

print("\n","="*25,"蚂蚁庄园动态","="*25,"\n")

with open('message.txt','r') as file:             # 打开保存蚂蚁庄园动态信息的文件

    messageall = file.readlines()                  # 读取全部动态信息

    for message in messageall:

        print(message)                              # 输出一条动态信息

print("\n","="*29,"over","="*29,"\n")

执行结果如图16所示。

图16  应用readlines()方法并逐行输出动态信息

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

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

相关文章

STM32项目分享:智能家居(机智云)系统

目录 一、前言 二、项目简介 1.功能详解 2.主要器件 三、原理图设计 四、PCB硬件设计 1.PCB图 2.PCB板及元器件图 五、程序设计 六、实验效果 七、资料内容 项目分享 一、前言 项目成品图片: 哔哩哔哩视频链接: https://www.bilibili.c…

父子组件,父组件调用子组件添加按钮只能点击一次

点击一次之后,只能刷新,不然无法点击任何东西 解决:父组件在写添加功能的时候,一定也要弄关闭的方法,不然只能关闭一次

不讲废话,热门主食冻干鲜朗、希喂、生生不息横向分析

随着科学养宠的普及,主食冻干喂养成为了新的流行趋势。除了知名的“四大金刚”K9、VE、SC、PR外,希喂、鲜朗等新兴品牌也以其营养和高肉含量的特点,获得了消费者的青睐。各大猫粮厂商也看准了这一市场机遇,纷纷推出了自家的主食冻…

OpenAI发布GPT-4思维破解新策略,Ilya亦有贡献!

OpenAI正在研究如何破解GPT-4的思维,并公开了超级对齐团队的工作,Ilya Sutskever也在作者名单中。 论文地址:https://cdn.openai.com/papers/sparse-autoencoders.pdf 代码:https://github.com/openai/sparse_autoencoder 特征可…

Type-C音频转接器方案

在数字化时代,音频设备作为我们生活中不可或缺的一部分,其连接方式的便捷性和高效性显得尤为重要。Type-C音频转接器,作为一种新型的音频连接解决方案,正逐渐走进我们的生活,以其独特的优势改变着我们的音频体验。 一、…

【ssh命令】ssh登录远程服务器

命令格式:ssh 用户名主机IP # 使用非默认端口: -p 端口号 ssh changxianrui192.168.100.100 -p 1022 # 使用默认端口 22 ssh changxianrui192.168.100.100 然后输入密码,就可以登录进去了。

D-Day 上海站回顾丨以科技赋能量化机构业务

5月31日下午,DolphinDB 携手光大证券,在上海成功举办 D-Day 行业交流会。三十余位来自私募机构的核心策略研发、量化交易员、数据分析专家们齐聚现场,深入交流量化投研交易过程中的经验、挑战及解决方案。 DolphinDB 赋能机构业务平台 来自光…

MSP430单片机控制流水灯,Proteus仿真

作品功能 本项目利用MSP430单片机控制一个简单的流水灯,通过按键切换流水灯的模式。用户可以通过按键控制LED灯的方向,从左向右或从右向左依次点亮。 作品的硬件材料 MSP430单片机 具体型号:MSP430G2553 LED灯 数量:8个类型&…

【C++ | 拷贝构造函数】一文了解C++的 拷贝(复制)构造函数

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 ⏰发布时间⏰:2024-06-07 2…

逆波兰表达式

目录 一、定义 二、算法步骤 三、代码实现 一、定义 逆波兰表达式又叫做后缀表达式,是一种没有括号,并严格遵循“从左到右”运算的后缀式表达方法。 二、算法步骤 1、首先构造一个运算符栈,此运算符在栈内遵循越往栈顶优先级越高的原则。 …

数据挖掘实战-基于Catboost算法的艾滋病数据可视化与建模分析

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

WindowServer2022配置iSCSI磁盘CHAP认证

实验环境: WindowsServer2022 一、实验环境 1、实验拓扑 为存储服务器添加4块100G的磁盘新建1个100G的iSCSI虚拟磁盘,发起目标选择IQN为保证连接安全,采用单向CHAP认证新建1个200G的iSCSI虚拟磁盘,发起目标选择IP地址为保证连接安全&#x…

DeepDriving | 多目标跟踪算法之SORT

本文来源公众号“DeepDriving”,仅用于学术分享,侵权删,干货满满。 原文链接:多目标跟踪算法之SORT 1 简介 SORT是2016年发表的一篇文章《Simple Online and Realtime Tracking》中提出的一个经典的多目标跟踪算法,…

【数据结构】栈和队列-->理解和实现(赋源码)

Toc 欢迎光临我的Blog,喜欢就点歌关注吧♥ 前面介绍了顺序表、单链表、双向循环链表,基本上已经结束了链表的讲解,今天谈一下栈、队列。可以简单的说是前面学习的一特殊化实现,但是总体是相似的。 前言 栈是一种特殊的线性表&…

flask_sqlalchemy时间缓存导致datetime.now()时间不变问题

问题是这样的,项目在本地没什么问题,但是部署到服务器过一阵子发现,这个时间会在某一刻定死不变。 重启uwsgi后,发现第一条数据更新到了目前最新时间,过了一会儿再次发送也变了时间,但是再过几分钟再发就会…

【全开源】JAVA打车小程序APP打车顺风车滴滴车跑腿源码微信小程序打车源码

:构建便捷出行新体验 一、引言:探索打车系统小程序源码的重要性 在数字化快速发展的今天,打车系统小程序已成为我们日常生活中不可或缺的一部分。它以其便捷、高效的特点,极大地改变了我们的出行方式。而背后的关键,…

啵啵啵啵啵啵啵啵啵啵啵啵啵啵啵

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术。关…

swaggerHole:针对swaggerHub的公共API安全扫描工具

关于swaggerHole swaggerHole是一款针对swaggerHub的API安全扫描工具,该工具基于纯Python 3开发,可以帮助广大研究人员检索swaggerHub上公共API的相关敏感信息,整个任务过程均以自动化形式实现,且具备多线程特性和管道模式。 工具…

增加强制索引依然慢

版本: 阿里云RDS MySQL 8.0.25 线上数据库CPU达到100%, 定位到如下SQL EXPLAIN SELECT ssd.goods_no,ssd.goods_name,ssd.goods_spec,ssd.goods_unit,ssd.create_time,w.warehouse_name,sb.batch_no,swl.warehouse_region_location_name,sc.customer_name AS goodsOwnerName,s…

如何在MySQL中实现upsert:如果不存在则插入?

目录 1 使用 REPLACE 2 使用 INSERT ... ON DUPLICATE KEY UPDATE 使用 INSERT IGNORE 有效会导致 MySQL 在尝试执行语句时忽略执行错误 INSERT 。这意味着 包含 索引或 字段 INSERT IGNORE 中重复值的语句 不会 产生错误,而只是完全忽略该特定 命令。其明显目的是…