python的readline()和readlines()
readlines()
readlines() 是 Python 中用于从文件对象中读取所有行的方法。它会一次性读取整个文件内容,并将每一行作为一个字符串存储在一个列表中返回。
使用方法和返回值
- 使用
readlines()方法可以读取文件的所有内容,每一行作为列表中的一个元素。 - 如果文件很大,一次性读取可能会占用较多内存,因此在处理大文件时需要注意内存消耗。
示例说明
假设有一个文本文件 example.txt 包含以下内容:
Hello Python!
This is a test file.
Goodjob!
可以通过以下代码使用 readlines() 方法读取文件的所有行:
file_path = 'example.txt'
with open(file_path, 'r') as file:lines = file.readlines()for line in lines:print(line.strip()) # 使用 strip() 方法去除每行末尾的换行符
运行这段代码后,将会输出文件的每一行内容:
Hello Python!
This is a test file.
Goodjob!
注意事项
- 返回的列表中每个元素是一个字符串,包含文件中相应行的内容。
- 每行末尾的换行符
\n会被保留在字符串中,如果需要可以使用字符串的strip()方法去除。
readlines() 是在需要一次性读取整个文件内容,并且希望将每一行分别处理时非常有用的方法。
readline()
readline() 是 Python 中用于从文件对象中读取单行内容的方法。它按行读取文件,每次调用 readline() 会读取文件的下一行。
readline() 的使用方法
基本语法
line = file.readline(size=-1)
size(可选):指定要读取的字节数。默认是-1,表示读取整行内容,包括行末的换行符。如果提供一个正整数,则会读取指定字节数的内容,直到遇到换行符或到达字节限制。
返回值
- 返回的内容:读取到的内容是字符串形式的一行(包括行末的换行符)。如果到达文件末尾,则返回一个空字符串
''。 - 返回值示例:
# 读取到的行 line = "This is a line of text.\n"
示例代码
假设有一个文件 example.txt,内容如下:
Line 1
Line 2
Line 3
以下是使用 readline() 方法读取文件内容的代码示例:
# 打开文件
with open('example.txt', 'r') as file:# 读取第一行line1 = file.readline()print(line1, end='') # 输出 "Line 1"# 读取第二行line2 = file.readline()print(line2, end='') # 输出 "Line 2"# 读取第三行line3 = file.readline()print(line3, end='') # 输出 "Line 3"
在这个示例中,readline() 方法每次读取文件的下一行,直到文件结束。
readline() 的高级用法
-
指定读取字节数:
可以使用
size参数指定要读取的字节数,直到遇到换行符或到达字节限制:with open('example.txt', 'r') as file:line = file.readline(5) # 读取5个字节print(line) # 可能输出 "Line\n" -
读取文件的特定行:
结合
readline()和循环,可以读取文件中的特定行:with open('example.txt', 'r') as file:for i in range(2): # 读取前两行line = file.readline()print(line, end='') -
读取多行内容:
通过循环调用
readline()方法,可以逐行读取文件内容:with open('example.txt', 'r') as file:while True:line = file.readline()if not line:breakprint(line, end='')
readline() 与 readlines() 的比较
| 方法 | 功能 | 返回值类型 | 使用场景 |
|---|---|---|---|
readline() | 读取单行内容 | 单行字符串 | 逐行读取文件内容 |
readlines() | 读取文件所有行 | 列表(每行是一个字符串) | 一次性读取整个文件内容 |
readline() 的常见应用场景
-
处理大文件:
逐行读取大文件时比readlines()更节省内存,因为它不将整个文件内容加载到内存中。 -
文件处理任务:
用于按需读取文件的每一行进行处理,比如日志分析、逐行查找特定内容等任务。
示例代码汇总
以下是一些 readline() 的使用示例:
# 打开文件并读取第一行
with open('example.txt', 'r') as file:first_line = file.readline()print(f"First line: {first_line.strip()}")# 读取每一行并处理
with open('example.txt', 'r') as file:while True:line = file.readline()if not line:breakprint(f"Processing line: {line.strip()}")# 使用 readline(size) 读取指定字节数
with open('example.txt', 'r') as file:part_of_line = file.readline(4)print(f"First 4 bytes of the first line: {part_of_line}")
这些示例展示了如何使用 readline() 读取文件的单行内容、逐行处理文件以及按字节数读取部分内容。
需要注意:
执行完后的指针位置
当每一次执行完readline() ,文件的指针都位于下一行的开头。而执行完readlines()后,文件的指针位于文件末尾。下面这段代码可以看出而执行完readlines()后的指针位置正是位于文件的尾部。
with open('demo.csv', 'r', encoding='gbk') as f:f.seek(0, 2) # 将指针移至文件尾print(f.tell()) # 获得文件尾的指针,执行结果238f.seek(0) # # 将指针移至文件头lines = f.readlines()print(f.tell()) # 执行结果238
两种方法都是从指定的文件指针作为起点开始读取
with open('demo.csv', 'r', encoding='gbk') as f:f.seek(20) # 将指针移至文件头的20字节lines = f.readlines() # 从指针处开始读取print(lines)
或:
with open('demo.csv', 'r', encoding='gbk') as f:f.seek(20) # 将指针移至文件头的20字节line = f.readline() # 从指针处开始读取print(line)
但是如果有汉字字符,需注意不要将汉字的字节拆开,否则会报错。
使用文件指针读取文件最后的几行
当文件很大,比如是某个运行日志,每次只需要读取最后的几行,就可以采用:
def tail(file_path, num_lines):with open(file_path, 'r', encoding='gbk') as f:# 将文件指针移到文件末尾f.seek(0, 2)# 获取文件末尾位置end_pos = f.tell()lines = []line_count = 0# 逐行向前读取文件内容,直到达到指定的行数或文件开头for pos in range(end_pos - 1, -1, -2):f.seek(pos)next_char = f.read(1)if next_char == '\n':# lines.append(f.readline().rstrip('\n')) 用readline()的方法line_count += 1# f.seek(pos-1)if line_count == num_lines:lines = f.readlines() # 用readlines()的方法break# 返回结果,注意如果用readline()的方法要逆序输出return lines# return lines[::-1] # 逆序输出# 调用函数并显示最后5行内容
file_path = 'demo.csv'
num_lines = 5
last_lines = tail(file_path, num_lines)
for line in last_lines:print(line.rstrip('\n'))
相关文章:
python的readline()和readlines()
readlines() readlines() 是 Python 中用于从文件对象中读取所有行的方法。它会一次性读取整个文件内容,并将每一行作为一个字符串存储在一个列表中返回。 使用方法和返回值 使用 readlines() 方法可以读取文件的所有内容,每一行作为列表中的一个元素…...
【ARM】使用JasperGold和Cadence IFV科普
#工作记录# 原本希望使用CCI自带的验证脚本来验证修改过后的address map decoder,但是发现需要使用JasperGold或者Cadence家的IFV的工具,我们公司没有,只能搜搜资料做一下科普了解,希望以后能用到吧。这个虽然跟ARM没啥关系不过在…...
深入探讨极限编程(XP):技术实践与频繁发布的艺术
目录 前言1. 极限编程的核心原则1.1 沟通1.2 简单1.3 反馈1.4 勇气1.5 尊重 2. 关键实践2.1 结对编程2.1.1 提高代码质量2.1.2 促进知识共享2.1.3 增强团队协作 2.2 测试驱动开发(TDD)2.2.1 提升代码可靠性2.2.2 提高代码可维护性2.2.3 鼓励良好设计 2.3…...
【代码随想录_Day30】1049. 最后一块石头的重量 II 494. 目标和 474.一和零
Day30 OK,今日份的打卡!第三十天 以下是今日份的总结最后一块石头的重量 II目标和一和零 以下是今日份的总结 1049 最后一块石头的重量 II 494 目标和 474 一和零 今天的题目难度不低,掌握技巧了就会很简单,尽量还是写一些简洁代…...
【时时三省】tessy 集成测试:小白入门指导手册
目录 1,创建集成测试模块且分析源文件 2,设置测试环境 3,TIE界面设置相关函数 4,SCE界面增加用例 5,编辑数据 6,用例所对应的测试函数序列 7,添加 work task 函数 8,为测试场景添加函数 9,为函数赋值 10,编辑时间序列的数值 11,执行用例 12,其他注意事项…...
通过vagrant与VirtualBox 创建虚拟机
1.下载vagrant与VirtualBox【windows版本案例】 1.1 vagrant 下载地址 【按需下载】 https://developer.hashicorp.com/vagrant/install?product_intentvagranthttps://developer.hashicorp.com/vagrant/install?product_intentvagrant 1.2 VirtualBox 下载地址 【按需下载…...
第13章 更多的结构化命令《Linux命令行与Shell脚本编程大全笔记》
13.1 For命令 格式:for var in list;dofor命令默认按照空格、制表符、换行符作为字段分隔符区分单个值,如果某个值含有空格要使用双引号从命令中读取值列表for state in $(cat $file)更改字段分隔符IFS(internal field separator)IFS$\n可能的需求&…...
【计算机网络】学习指南及导论
个人主页:【😊个人主页】 系列专栏:【❤️计算机网络】 文章目录 前言我们为什么要学计算机网络?计算机网络概述计算机网络的分类按交换技术分类按使用者分类按传输介质分类按覆盖网络分类按覆盖网络分类 局域网的连接方式有线连接…...
安装mitmproxy失败
安装mitmproxy失败记录 问题记录 问题记录 安装mitmproxy时,发现一直报错 这里的报错是因为我缺少了编译的环境 我是win7 的系统,缺少C的环境,所以我安装的时候源码包无法编译。 单独安装了这个包,依旧是失败的。 1.尝试用以下命…...
安装adb和常用命令
下载ADB安装包 https://dl.google.com/android/repository/platform-tools-latest-windows.zip 解压安装包 解压如上下载的安装包,然后复制adb.exe所在的文件地址 配置环境变量 我的电脑——>右键属性——>高级系统设置——>环境变量——>系统变量—…...
C++ 几何计算库
代码 #include <iostream> #include <list> #include <CGAL/Simple_cartesian.h> #include <CGAL/AABB_tree.h> #include <CGAL/AABB_traits.h> #include <CGAL/AABB_segment_primitive.h> #include <CGAL/Polygon_2.h>typedef CGAL…...
云动态摘要 2024-07-16
给您带来云厂商的最新动态,最新产品资讯和最新优惠更新。 最新优惠与活动 数据库上云优选 阿里云 2024-07-04 RDS、PolarDB、Redis、MongoDB 全系产品新用户低至首年6折起! [免费体验]智能助手ChatBI上线 腾讯云 2024-07-02 基于混元大模型打造&…...
数仓工具—Hive基础之临时表及示例
Hive基础之临时表及示例 临时表是应用程序自动管理在大型或复杂查询执行期间生成的中间数据的一种便捷方式。Hive 0.14 及更高版本支持临时表。可以在用户会话中像使用普通表一样多次使用它们。在本文中,我们将介绍 Apache Hive 临时表,以及如何创建和使用限制的示例。 Hiv…...
机体坐标系和导航坐标系
目录 机体坐标系(Body Frame)例子:无人机的机体坐标系 导航坐标系(Navigation Frame)例子:地球固定的导航坐标系 具体例子说明机体坐标系描述导航坐标系描述 总结 机体坐标系(Body Frame&#x…...
软件测试——web单功能测试
工作职责: 1.负责产品系统测试,包括功能测试、性能测试、稳定性测试、用户场景测试、可靠性测试等。 2.负责测试相关文档的编写,包括测试计划、测试用例、测试报告等。 3.负责自动化测试框架、用例的维护。 岗位要求: 1.熟练…...
django-ckeditor富文本编辑器
一.安装django-ckeditor 1.安装 pip install django-ckeditor2.注册应用 INSTALLED_APPS [...ckeditor, ]3.配置model from ckeditor.fields import RichTextFieldcontent RichTextField()4.在项目中manage.py文件下重新执行迁移,生成迁移文件 py…...
鸿蒙模拟器(HarmonyOS Emulator)Beta申请审核流程
文 | Promise Sun 一.背景: 鸿蒙项目开发需要使用模拟器进行开发测试,但目前想在DevEco Studio开发工具中使用模拟器就必须到华为官网进行报名申请,参加“鸿蒙模拟器(HarmonyOS Emulator)Beta活动申请”。 申请审核通…...
VUE:跨域配置代理服务器
//在vite.config。js中,同插件配置同级进行配置server:{proxy:{"/myrequest":{//代理域名,可自行修改target:"https://m.wzj.com/",//访问服务器的目标域名changeOrigin:true,//允许跨域configure:(proxy,options) > {proxy.on(&…...
Redis实战—附近商铺、用户签到、UV统计
本博客为个人学习笔记,学习网站与详细见:黑马程序员Redis入门到实战 P88 - P95 目录 附近商铺 数据导入 功能实现 用户签到 签到功能 连续签到统计 UV统计 附近商铺 利用Redis中的GEO数据结构实现附近商铺功能,常见命令如下图所示。…...
小程序里面使用vant ui中的vant-field组件,如何使得输入框自动获取焦点
//.wxml <van-fieldmodel:value"{{ userName }}"placeholder"请输入学号"focus"{{focusUserName}}"/>// .js this.setData({focusUserName: true});vant-field...
在软件开发中正确使用MySQL日期时间类型的深度解析
在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...
装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...
Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...
UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...
在四层代理中还原真实客户端ngx_stream_realip_module
一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...
华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...
