栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Python-读取文件并以分号分隔行的最佳方法

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python-读取文件并以分号分隔行的最佳方法

您发布的代码读取整个文件,并在内存中构建文件的副本,将其作为所有文件内容的单个列表,并分为多个元组,每行一个元组。由于您询问如何使用更少的内存,因此您可能只需要一个生成器函数:

def readfile(filepath, delim):     with open(filepath, 'r') as f:         for line in f: yield tuple(line.split(delim))

但!有一个重大警告!您只能对readfile返回的元组进行一次迭代。

lines_as_tuples = readfile(mydata,','):for linedata in lines_as_tuples:    # do something

到目前为止还可以,并且生成器和列表看起来相同。但是,假设您的文件将包含许多浮点数,并且您对该文件的迭代计算出了这些数字的总体平均值。您可以使用“#做某事”代码来计算总和和数量,然后计算平均值。但是,现在让我们说您想再次进行迭代,这次是从每个值的平均值中找出差异。您可能会想再添加一个for循环:

for linedata in lines_as_tuples:    # do another thing    # BUT - this loop never does anything because lines_as_tuples has been consumed!

AM!这是生成器和列表之间的很大差异。现在,在代码中,生成器已被完全消耗掉了-但是没有引发任何特殊异常,for循环只是不执行任何操作,然后继续静默运行!

在许多情况下,您将返回的列表仅重复一次,在这种情况下,将readfile转换为生成器就可以了。但是,如果您想要的是一个更持久的列表,您将访问该列表多次,那么仅使用生成器会给您带来问题,因为您只能迭代生成器一次。

我的建议?使readlines成为一个生成器,以便在其自己的世界观中,它仅产生文件的每个增量位,既美观又节省内存。将保留数据的负担放在调用方上-
如果调用方需要多次引用返回的数据,则调用方可以简单地从生成器构建自己的列表-使用Python轻松完成

list(readfile('file.dat',','))



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/625933.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号