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...
基于Python的校园便利平台毕设源码
博主介绍:✌ 专注于Java,python,✌关注✌私信我✌具体的问题,我会尽力帮助你。一、研究目的本研究旨在构建一个基于Python的校园便利平台,以提升校园生活品质,优化资源配置,增强学生与教职工的互动体验。具体研究目的如…...
3大核心策略:构建高效抖音内容采集系统的技术实践
3大核心策略:构建高效抖音内容采集系统的技术实践 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support. …...
还在用老方法显示数据?手把手教你用MFC的CListCtrl打造一个带图标的学生信息查询系统
实战MFC:用CListCtrl构建可视化学生管理系统 在桌面应用开发领域,数据展示一直是用户体验的核心环节。传统的表格控件虽然能完成基本功能,但缺乏视觉层次和交互灵活性。MFC中的CListCtrl控件提供了四种视图模式,特别适合需要同时呈…...
QueryExcel:解放双手的Excel批量查询神器,告别Ctrl+F的繁琐时代
QueryExcel:解放双手的Excel批量查询神器,告别CtrlF的繁琐时代 【免费下载链接】QueryExcel 多Excel文件内容查询工具。 项目地址: https://gitcode.com/gh_mirrors/qu/QueryExcel 在日常工作中,你是否也曾被海量Excel文件中的数据查找…...
Qwen-Image-2512图片生成服务:支持多种宽高比,满足不同场景需求
Qwen-Image-2512图片生成服务:支持多种宽高比,满足不同场景需求 1. 引言:为什么宽高比如此重要? 在数字内容创作领域,图片的宽高比往往决定了它的最终用途。一张构图精美的图片,如果比例与展示平台不匹配…...
服务器很卡,是CC攻击造成的吗
之前有客户反馈,服务器有一段时间使用总是会遇到卡的情况,查看并无流量攻击的情况,程序也未进行过什么修改,用户人数也没有什么变化。来咨询是什么原因导致的。导致机器卡的情况,一般有带宽不够,硬件性能不…...
OpenCompass本地评测大模型实战指南(2025最新版)
1. 为什么你需要OpenCompass本地评测 最近两年大模型发展太快了,各种新模型层出不穷。作为开发者,你是不是经常遇到这样的困惑:这个新发布的模型到底效果如何?和之前用的模型相比优势在哪里?官方公布的benchmark数据靠…...
Ubuntu22.04微信依赖冲突的终极解决方案
1. 问题现象与原因分析 最近在Ubuntu 22.04上安装微信时,很多朋友都遇到了依赖冲突的问题。具体表现是当你尝试通过命令行安装微信时,系统会提示类似这样的错误信息: 下列软件包有未满足的依赖关系: libldap-2.4-2 : 依赖: libsas…...
Nuxt3 + PM2 + Nginx:打造高可用前端部署方案(附常见问题排查指南)
Nuxt3 PM2 Nginx:打造高可用前端部署方案(附常见问题排查指南) 在当今快速迭代的Web开发领域,Nuxt3凭借其出色的服务端渲染能力和现代化的开发体验,正成为越来越多技术团队的首选框架。然而,将Nuxt3应用部…...
人工智能准备好进行多模态仇恨言论检测了吗?
摘要 网络仇恨言论针对个人或群体的身份属性进行攻击,传播迅速,带来严重的社会风险。模因(结合图像与文本的形式)已成为传播仇恨言论的一种隐蔽载体,其解读往往依赖文化背景知识。 然而,现有的多模态仇恨言…...
