python读取文件指定行的三种方法

三种方法Python读取文件指定行,来看看你用过没? 我的心里只有学习 阅读详情
AI摘要

本文对比了Python中读取大文件指定行内容的四种方法:行遍历、linecache模块、命令行sed指令。在效率上,对于大规模数据,sed指令最快,而对于小规模数据,行遍历和linecache也有不错表现。在选择方案时需考虑性能需求。

1.行遍历实现

在python中如果要将一个文件完全加载到内存中,通过file.readlines()即可,但是在文件占用较高时,我们是无法完整的将文件加载到内存中的,这时候就需要用到python的file.readline()进行迭代式的逐行读取:

filename = 'hello.txt'

with open(filename, 'r') as file:
    line = file.readline()
    counts = 1
    while line:
        if counts >= 50000000:
            break
        line = file.readline()
        counts += 1

这里我们的实现方式是先用一个with语句打开一个文件,然后用readline()函数配合while循环逐行加载,最终通过一个序号标记来结束循环遍历,输出文件第50000000行的内容。该代码的执行效果如下:

dechin@ubuntu2004:~/projects/gitlab/dechin/$ time python3 get_line.py 

real    0m10.359s
user    0m10.062s
sys     0m0.296s

可以看到这里的耗时为10s多一些。

2.linecache实现

虽然在python的readline函数中并没有实现读取指定行内容的方案,但是在另一个库linecache中是实现了的,由于使用的方式较为简单,这里直接放上代码示例供参考:

filename = 'hello.txt'

import linecache
text = linecache.getline(filename, 50000000)

该代码的执行结果如下:

dechin@ubuntu2004:~/projects/gitlab/dechin/$ time python3 get_line.py 

real    0m11.904s
user    0m5.672s
sys     0m6.231s

虽然在实现方式上简化了许多,但是我们发现这个实现的用时超过了11s,还不如我们自己手动实现的循环遍历方案。因此如果是对于性能有一定要求的场景,是不建议采用这个方案的。

3.命令行sed获取

我们知道用Linux系统本身自带的sed指令也是可以获取到文件指定行或者是指定行范围的数据的,其执行指令为:sed -n 50000000p filename即表示读取文件的第50000000行的内容。同时结合python的话,我们可以在python代码中执行系统指令并获取输出结果:

filename = 'hello.txt'

import os
result = os.popen('sed -n {}p {}'.format(50000000, filename)).read()

需要注意的是,如果直接运行os.system()是没有返回值的,只有os.popen()是有返回值的,并且需要在尾巴加上一个read()的选项。该代码的执行结果如下:

dechin@ubuntu2004:~/projects/gitlab/dechin/$ time python3 get_line.py 

real    0m2.532s
user    0m0.032s
sys     0m0.020s

可以看到直接使用sed指令的执行速度很快,但是用这种方法并不是一本万利的,比如以下这个例子:

filename = 'hello.txt'

import os
result = os.popen('sed -n {}p {}'.format(500, filename)).read()

我们把读取第50000000行内容改为读取第500行的内容,再运行一次程序:

'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''

dechin@ubuntu2004:~/projects/gitlab/dechin/$ time python3 get_line.py 

real    0m2.540s
user    0m0.037s
sys     0m0.013s

然而我们发现这个速度并没有因为要读取的行数减少了而变少,而是几乎保持不变的。

4.总结

本文通过4个测试案例分析了在python中读取文件指定行内容的方案,并得到了一些运行耗时的数据。从需求上来说,如果是对于小规模的数据,比如几百行规模的数据,建议使用readline循环遍历来操作,速度也相当不错,或者是linecache中的函数实现也是可以的,甚至可以直接用readlines将整个文本内容加载到内存中。但是对于数据规模比较大的场景,比如超过了千万行的级别,那么使用sed指令的方式对指定行内容进行读取的方式,应该是所有方式中最快速的。

Python中三种不同文件读取方式的区别 Python中三种不同文件读取方式的区别 Python中有三种不同的文件读取方式:read()、readline()、readlines() 我们就拿机器学习实战这本书中的dating的txt作为例子,分别测试这三个函数 1、read read()函数有一个参数n,意为一次读取n个字符,如果在使用时不使用n,就是读取txt文件中的所有内容 fr = open('datingTestSet2.txt') str = fr.read() print(str) 不使用n: 如果使用了n,假定n=4 2、r 阅读详情

相关推荐

7.6:Python如何在文件中查找指定的内容?

在实际应用中,可以根据需求灵活选择合适的方法。使用Python在文件中查找指定的内容可以提高数据处理和分析的效率,是Python学习中必不可少的一项技能。

小兔子平安 5168

readline函数 读取一行数据

readline方法: 表示读取一行数据,默认从第一行开始读取 利用readline读取txt中一行数据。 # 读取一行数据 file = open('3.txt', 'r', encoding="utf-8") con = file .readline() print(con) file.close() #嘻嘻嘻嘻嘻嘻 利用readline读取txt中所有的数据。 file = open("3.txt", "r", encoding="utf-8") while True: #w...

缘 源 园 6116

Python中的文件读取方法:read、readline和readlines

Python提供了几种方法来实现文件读取操作,其中包括read、readline和readlines。以上就是Python中read、readline和readlines方法的用法。根据具体的需求,我们可以选择适合的方法来读取文件内容。每次调用readline方法,它会读取文件中的一行,并将文件指针移动到下一行的开头。readlines方法用于一次性读取文件中的所有行,并将每一行作为一个字符串元素存储在一个列表中返回。Python中的文件读取方法:read、readline和readlines。

AlianBlank的博客 223

Python文件操作:操作文件的1个函数3个方法使用、readline按行读取文件、文件指针(详细图文)

主要介绍Python文件的操作方法使用,分别是打开、读、写、关闭,文件打开模式,以及按行读取文件内容的方法使用操作,还有一个小扩展就是文件指针相关小知识,知识点虽然多但是不会很复杂,属于基础知识。

weixin_48728769的博客 3437

readline.m v4.0:从文件中读取指定的行。-matlab开发

用法: % 读取第一行(默认) s = readline('data.txt'); % 读取第 8 行s = readline('data.txt',8); % 读取 [1 2 4 8] 行s = readline('data.txt',[1 2 4 8]); % 读取最后 7 行s = readline('data.txt',[-7; -1]); % 或者只是,读取整个文件s = readline('data.txt','all'); 笔记: 通常,输出是一个字符串单元格。 您可以使用第三个参数强制输出字符串矩阵s = readline('data.txt','all','string');

华强北手表256G真相大揭秘:ADB命令实测内存与存储(附完整调试教程)

本文通过ADB命令实战揭秘华强北智能手表256G存储等硬件参数的真实性。文章提供了从开启调试模式到使用ADB命令查询系统属性、验证内存与存储容量的完整教程,帮助用户识别参数虚标,评估设备真实性能与潜在风险。

e3f4g5的博客 1231

【Python学习】从文件中读取数据

读取系统文件内容

weixin_73348410的博客 5600

S32K144之芯片锁死解锁——进入HardFault

S32K144之芯片锁死解锁——进入HardFault 最近遇到因为软件代码问题导致进入HardFault,从而使芯片锁死,来简述具体现象以及最终的解锁方法。 导致原因:如下图,在进行Gpio的相关配置,case后面没有break语句,导致芯片进入HardFault。 现象1:reset引脚持续为低,reset指示灯常亮。如果掉电后重新上电,通过示波器抓取reset引脚的波形,会有510us左右或者29ms左右的低电平脉冲出现,一般会出现两三次左右并且没有规矩,持续几秒的高电平之后,reset脚再次被拉低

weixin_41935674的博客 8269

python如何读取文件指定行?三种方法介绍!

我们知道用Linux系统本身自带的sed指令也是可以获取到文件指定行或者是指定行范围的数据的,其执行指令为:sed -n 50000000p filename即表示读取文件的第50000000行的内容。虽然在实现方式上简化了许多,但是我们发现这个实现的用时超过了11s,还不如我们自己手动实现的循环遍历方案。需要注意的是,如果直接运行os.system()是没有返回值的,只有os.popen()是有返回值的,并且需要在尾巴加上一个read()的选项。可以看到这里的耗时为10s多一些。

qq_33227656的博客 4424

Docker - 基本概念、与虚拟机的区别、架构、镜像操作、容器操作、数据卷挂载

p :将宿主机端口与容器端口映射,冒号左侧是宿主机端口,右侧是容器端口(配置映射是因为用户只能通过 http 请求访问到服务器,不能直接访问到对应的容器,因此需要服务器端口与容器端口建立映射关系)这里我们有两种启动 redis 的方式,第一种是直接启动 redis ,第二种是以 AOF 持久化的方式启动容器(--appendonly yes),如下图。如果需要持续查看日志信息可以添加 -f 参数,例如:docker logs -f mn ,这里 mn 是自定义容器名称, ctrl + c 可以停止跟踪。

CYK_byte的博客 1万+

uniapp - 超详细 H5 网页引入百度地图教程,附地图示例 / 获取当前设备定位的省市区、详细地址、经纬度信息 / 用户当前 IP 属地定位地理位置等等(新手小白快速上手,详细配置及使用全流程)

uniapp百度地图,uniapp百度地图ip属地定位,uniapp百度地图获取省市区详细地址经纬度等,uniapp百度地图当前用户设备定位省份市区详细所在地ip属地等详细教程示例,uniapp网页h5引入百度地图详细教程,uniapp h5网站使用百度地图详细教程,uniappH5端如何接入使用百度地图api,uniapp H5网页端百度地图获取地理位置信息,uniapp h5页面引入百度地图,uniapp h5平台百度地图获取城市信息,uniapp百度地图获取经纬度,uniapp 百度地图拿省市区用什么

🏆 前端领域优质创作者 6212

python从指定行开始读取csv文件_从python中的随机行开始读取CSV文件

这将在不需要多处理的情况下满足您的要求,部分原因是您很可能不需要它。在一个简单的基准使方案3在速度上成为赢家。在选项1:import csvimport randomstarting_points = [random.randint(0, 5) for i in range(3)]read_nbr_of_lines = 2for sp in starting_points:print('rando...

weixin_42305901的博客 3019

单板电源设计(LDO、DC/DC)

高速电路设计的电源架构 在电路设计中,一块单板往往涉及多种电源,常见的如5V/3.3V/2.5V/1.8V/1.5V/1.2V/1V0.9V/0.75V等,如此多种类的电源不可能都直接通过背板从电源板获得。一般,单板仅有一种或者两种输入电源,如48V或12V,再由它们产生单板上器件所需要的电源。 单板如何由输入电源生成所需电源,常见有两种架构:集中式电源架构和分布式电源架构。 ...

sinat_15677011的博客 8325

python中读取文件常用的三种方法:read(),readline(),readlines()

前言众所周知...

大西瓜不甜的博客 2388

【UVM实战】第一章:配置UVM环境(以VCS为例),跑通书上的例子(包括清理中间文件方法、使用DVE查看波形方法、命令执行原理探究)

如何配置UVM的VCS运行环境,运行书本上的例子呢?本节将会为你详细解答!

悟已往之不谏 知来者之可追 8131

uniapp(全端兼容) - 最新详细实现瀑布流列表及布局设计,uni-app全平台兼容的瀑布流示例,view容器自适应瀑布流布局,图片瀑布流布局、图像+文字卡片式瀑布流,类似小红书(详细示例代码)

uni-app,瀑布流,安卓app,苹果app,微信小程序,移动端,H5网页,手机网站,微信小程序、支付宝小程序,手机app端,nvue,瀑布流布局,如何实现图片瀑布流,怎么做文字+图像瀑布流,uniapp仿小红书笔记瀑布流效果,uniAPP仿快手抖音布局列表,瀑布流列表详细教程,编译所有平台都能用的瀑布流列表,商品瀑布流列表,图文列表,小程序瀑布流,页面触底懒加载,瀑布流插件,详细示例代码教程,uni-app H5实现瀑布流效果,uniapp小程序做瀑布流,纯css瀑布流,用uniapp写瀑布流商品列表,

✅ 精选推荐文章 1万+

python脚本模仿awk过滤指定行和列

主要是觉得awk语法不太熟悉,想着用python来过滤文本,以后不记awk命令了

m0_46246791的博客 328

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

python3读取文件指定行的三种方案

技术背景 考虑到深度学习领域中的数据规模一般都比较大,尤其是训练集,这个限制条件对应到实际编程中就意味着,我们很有可能无法将整个数据文件的内容全部都加载到内存中。那么就需要一些特殊的处理方式,比如:创建内存映射文件来替代原始文件被加载到内存中、预处理数据后再加载内存中以及单次只加载文件的片段。其中关于内存映射技术的一些应用,在前面的这2篇博客1和博客2中有所介绍,而本文将要介绍的是从文件中只读取...

Dechin的博客 1682

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Python中文件的多种读取操作

1.read(), readline() 和readlines() 的基本用法 read():读取文件内容,返回文件的所有内容 readline():一行一行的读取文件的内容 readlines():读取文件内容,返回一个列表,列表里的元素分别为文件每行的内容 f=open('D:/westos.txt') print(f.read()) #最基本的读取方式,可以读取文件的所有内容 print(...

yrx420909的博客 259

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Python实现从文件中读取指定行的方法

这篇文章主要介绍了Python3实现从文件中读取指定行的方法,涉及Python中linecache模块操作文件的使用技巧,需要的朋友可以参考下 本文实例讲述了Python3实现从文件中读取指定行的方法。分享给大家供大家参考。具体实现方法如下: ''' 遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006 寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PD...

python学习者的博客 3万+

python如何读取文件指定行_Python读取文件、大文件和指定行内容的几种方法

在使用python处理文本的时候,经常会需要读取文件的内容。如果文件比较小,那么直接使用open文件对象打开文件,再通过read()方法最为方便,这种方法就是把文件内容读出来后放到内存变量。readf = open('/var/log/nginx/zhangnq.com.log','rb')#读取全部log_data = f.read()f.close()# 按行读取但是,当文件很大比如10GB,...

weixin_29164843的博客 4866

Python3实现从文件中读取指定行的方法

from:http://www.jb51.net/article/66580.htm 这篇文章主要介绍了Python3实现从文件中读取指定行的方法,涉及Python中linecache模块操作文件的使用技巧,需要的朋友可以参考下 本文实例讲述了Python3实现从文件中读取指定行的方法。分享给大家供大家参考。具体实现方法如下: # Python的标准库linecache模块非常适合这个任...

weixin_34121282的博客 9539
上一篇: 用Python字符串访问与修改局部变量
下一篇: python中一定要知道的:异常定义
Python程序u猿
博客等级 码龄5年 622粉丝 84原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值