您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

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', ','))

python 2022/1/1 18:31:28 有204人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶