首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在python中逐行阅读大文件?

如何在python中逐行阅读大文件?

提问于 2017-12-21 08:45:50
回答 2关注 0查看 516

我想遍历整个文件的每一行。一种方法是读取整个文件,将其保存到列表中,然后转到感兴趣的行。这种方法使用了大量的内存,所以我正在寻找一个替代方案。

我的代码到目前为止:

代码语言:txt
复制
代码语言:txt
AI代码解释
复制
for each_line in fileinput.input(input_file):
代码语言:txt
AI代码解释
复制
    do_something(each_line)
代码语言:txt
复制
代码语言:txt
AI代码解释
复制
    for each_line_again in fileinput.input(input_file):
代码语言:txt
AI代码解释
复制
        do_something(each_line_again)

执行这个代码给出一个错误信息:device active。

有什么建议么?

编辑:目的是计算成对的字符串相似性,这意味着在文件中的每一行,我想要计算每隔一行Levenshtein距离。

回答 2

不知雨

发布于 2017-12-21 09:12:42

1.使用 with

with是读大文件的好方法。优点 - 1)文件对象退出with执行块后自动关闭。2)with块内的异常处理。3)内存for循环f逐行遍历文件对象。内部它缓冲IO(优化昂贵的IO操作)和内存管理。

with open("x.txt") as f:

for line in f:

do something with data

2.使用 yield

有时候可能需要更细致地控制每次迭代的读取次数。在这种情况下,使用国际热核实验堆和产量。注意这个方法显式需要在最后关闭文件。

代码语言:txt
AI代码解释
复制
def readInChunks(fileObj, chunkSize=2048):
代码语言:txt
AI代码解释
复制
    """
代码语言:txt
AI代码解释
复制
    Lazy function to read a file piece by piece.
代码语言:txt
AI代码解释
复制
    Default chunk size: 2kB.
代码语言:txt
AI代码解释
复制
    """
代码语言:txt
AI代码解释
复制
    while True:
代码语言:txt
AI代码解释
复制
        data = fileObj.read(chunkSize)
代码语言:txt
AI代码解释
复制
        if not data:
代码语言:txt
AI代码解释
复制
            break
代码语言:txt
AI代码解释
复制
        yield data
代码语言:txt
复制
代码语言:txt
AI代码解释
复制
f = open('bigFile')
代码语言:txt
AI代码解释
复制
for chuck in readInChunks(f):
代码语言:txt
AI代码解释
复制
    do_something(chunk)
代码语言:txt
AI代码解释
复制
f.close()

陷阱和为了完整起见 - 下面的方法不是很好或不是优雅的阅读大文件,但请阅读获得圆润的理解。

在Python中,从文件读取行的最常用方法是执行以下操作:

代码语言:txt
AI代码解释
复制
for line in open('myfile','r').readlines():
代码语言:txt
AI代码解释
复制
    do_something(line)

但是,当完成这个操作时,readlines()函数(同样适用于read()函数)将整个文件加载到内存中,然后遍历它。一个稍微好点的方法(第一个提到的两个方法是最好的)大文件就是使用这个fileinput模块,如下:

代码语言:txt
AI代码解释
复制
import fileinput
代码语言:txt
复制
代码语言:txt
AI代码解释
复制
for line in fileinput.input(['myfile']):
代码语言:txt
AI代码解释
复制
    do_something(line)

这个fileinput.input()调用是按顺序读取行的,但是在读取之后不会将它们保存在内存中,甚至不会将它们保存在内存中,因为file在Python中是可迭代的。

最爱开车啦

发布于 2017-12-21 09:11:36

没有人给出正确的,完全Pythonic的方式来阅读文件。这是以下内容:

代码语言:txt
AI代码解释
复制
with open(...) as f:
代码语言:txt
AI代码解释
复制
    for line in f:
代码语言:txt
AI代码解释
复制
        <do something with line>

该with语句处理打开和关闭文件,包括如果在内部块中引发异常。该for line in f会将文件对象f视为可迭代,它会自动使用缓冲IO和内存管理,所以你不必担心大文件。

应该有一个 - 最好只有一个 - 明显的方法来做到这一点。

和开发者交流更多问题细节吧,去 写回答
相关文章
如何在Java中逐行读取文件
本文翻译自How to read a file line by line in Java
ccf19881030
2020/11/24
11.3K0
如何在 Linux 中查找大文件?
在 Linux 系统中,有时候我们需要查找并识别占用大量磁盘空间的文件。这些大文件可能导致磁盘空间不足或性能下降。本文将详细介绍在 Linux 中使用不同的命令和工具来查找大文件的方法。
网络技术联盟站
2023/06/09
19.3K0
如何在 Linux 中查找大文件?
Python 逐行读取socket中的数
网上找到一个简单的用法: socket.makefile().readline()
py3study
2020/01/15
1.7K0
Python逐行写入
# -*-coding:utf-8-*-import os# 写之前,先检验文件是否存在,存在就删掉if os.path.exists("dest.txt"): os.remove("dest.txt")# 以写的方式打开文件,如果文件不存在,就会自动创建file_write_obj = open("dest.txt", 'w')var = "adfss"file_write_obj.writelines(var)file_write_obj.write('\n')file_write_obj.clo
狼啸风云
2020/07/26
2.5K0
python逐行读取文本
一、使用open打开文件后一定要记得调用文件对象的close()方法。比如可以用try/finally语句来确保最后能关闭文件。
狼啸风云
2021/11/10
2.6K0
逐行阅读Spring5.X源码(一) BeanDefinition,起点
本篇博客你讲学到: 1. 如何理解BeanDefinition 2. 准备环境 3. BeanDefinition接口讲解 4. BeanDefinition的类继承关系 5. IOC的引出 6. BeanFactory工厂的引出 7. 后置处理器的引出 8. spring扩展性初探
源码之路
2020/09/03
1.4K0
如何在Linux和Unix中通过网络快速传输大文件
在 GNU/Linux 中的两个系统之间通过网络快速传输大文件 确保你在系统上安装了netcat和pv应用程序。如果尚未安装它们,你可以如下所示安装它们。大多数 Linux 系统默认提供tar包,不必额外安装。 在 Arch Linux 及其衍生产品上: $ sudo pacman -S netcat pv 在 RHEL、CentOS、Fedora 上: $ sudo yum install epel-release $ sudo yum install nc pv 或 $ sudo dnf inst
入门笔记
2022/06/02
1.9K0
Python 读取大文件
在处理大数据时,有可能会碰到好几个 G 大小的文件。如果通过一些工具(例如:NotePad++)打开它,会发生错误,无法读取任何内容。
py3study
2020/01/10
1.8K0
python 逐行读取并赋值变量
如果程序要读取行,通常只能用文本方式来读取,道理很简单,只有文本文件才有行的概念,二进制文件没有所谓行的概念。
matinal
2023/10/13
3100
python 查找大文件
root="D:\" def get_FileSize(filePath): try: fsize = os.path.getsize(filePath) fsize = fsize/float(1024*1024) return round(fsize,2) except: return 0 for r,dirs,files in os.walk(root): for file in files: name=os.path.join(r,file) size=get_FileSize(name) if size>500: print(name,size)
用户5760343
2019/11/21
2.6K0
python读取大文件
python读取文件对各列进行索引 可以用readlines, 也可以用readline, 如果是大文件一般就用readline
py3study
2020/01/07
1.1K0
Python+Pandas逐行处理DataFrame中的某列数据(无循环)
创建一个包含10行6列随机数的DataFrame,行标签从大写字母A开始,列标签从小写字母u开始。然后从上向下遍历,如果某行u列的值比上一行u列的值大,就把该行x列的值改为上一行x列的值加1,否则保持原来的值不变。
Python小屋屋主
2023/08/29
2K0
Python+Pandas逐行处理DataFrame中的某列数据(无循环)
逐行阅读Spring5.X源码(六) ClassPathBeanDefinitionScanner扫描器
spring包扫描是通过ClassPathBeanDefinitionScanner类来完成的,它主要工作有两个:
源码之路
2020/09/04
6810
逐行阅读Spring5.X源码(六) ClassPathBeanDefinitionScanner扫描器
逐行阅读Spring5.X源码(十三)spring事务源码分析
spring并不直接管理事务,而是提供了多种事务管理器,他们将事务的管理职责委托给Hibernate或JTA等持久化机制所提供的相关平台框架的事务来实现。通过这个接口,spring为各个平台如JDBC、Hibernate等提供了对应的事务管理器,但是事务的实现就是各平台自己的事情了。
源码之路
2020/09/04
7470
逐行阅读Spring5.X源码(十三)spring事务源码分析
逐行阅读Spring5.X源码(十一)AOP概念、应用、原理
与OOP对比,面向切面,传统的OOP开发中的代码逻辑是自上而下的,而这些过程会产生一些横切性问题,这些横切性的问题和我们的主业务逻辑关系不大,这些横切性问题不会影响到主逻辑实现的,但是会散落到代码的各个部分,难以维护。AOP是处理一些横切性问题,AOP的编程思想就是把这些问题和主业务逻辑分开,达到与主业务逻辑解耦的目的。使代码的重用性和开发效率更高。
源码之路
2020/09/04
9080
逐行阅读Spring5.X源码(十一)AOP概念、应用、原理
逐行阅读Spring5.X源码(番外篇)AnnotatedBeanDefinitionReader的作用
在上一篇文章里面我们讨论了一个beanDefintion对象的重要性,为了讨论spring当中的beanDefinition对象我们不得不牵扯出spring当中的bean工厂后置处理器也就是BeanFactoryPostProcessor这个类;继而讨论了BeanFactoryPostProcessor的大概执行时机(BeanFactoryPostProcessor的执行时机很重要而且spring内部做的稍微有点复杂,本文重点来讨论spring内部怎么保证这些执行时机得以严禁的执行,还有如何来扩展spring的bean工厂后置处理器);首先通过一张图简单的理解一下spring容器启动的时候执行调用BeanFactoryPostProcessor后置处理器的大概的方法执行顺序:
源码之路
2020/09/04
8060
逐行阅读Spring5.X源码(番外篇)AnnotatedBeanDefinitionReader的作用
如何在 Python 中清屏
在很多时候,如果我们在控制台中使用 Python, 随着时间的推移,可能会发现屏幕越来越乱。
HoneyMoose
2021/03/08
3.4K0
如何在 Python 中清屏
如何在 Python 中清屏
在很多时候,如果我们在控制台中使用 Python, 随着时间的推移,可能会发现屏幕越来越乱。
HoneyMoose
2021/03/11
4.5K0
如何在 Python 中清屏
python txt中的文件,逐行读取并且每行赋值给变量
最近想做自动化,想到可能会用到很多账号密码,所以想到了用参数化,但是一个用户,一个密码,中间还得一个冒号,不方便,就想到了利用Python实现(为了解决这个问题,我也花费了很长时间)
matinal
2023/10/13
6960
python txt中的文件,逐行读取并且每行赋值给变量
点击加载更多

相似问题

如何在GO中逐行读取文件?

21.3K

传输大文件?

1314

TCL中字符串逐行比较?

062

如何逐行读取文件?

2248

如何逐行读取文件?

2312
相关问答用户
某公司 | 程序员擅长1个领域
腾讯云TDP | 先锋会员擅长2个领域
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档