【问题标题】:Python -Optimize file parsingPython - 优化文件解析
【发布时间】:2017-01-31 08:23:17
【问题描述】:

我正在开展一个项目,该项目涉及存储在 .txt 文件中的大数据。我的程序运行有点慢。我认为的一个原因是我的程序以一种非有效的方式解析文件。

文件样本:

X | Y | Weight
--------------

1  1  1
1  2  1
1  3  1
1  4  1
1  5  1
1  6  1
1  7  1
1  8  1
1  9  1
1  10  1

解析器代码:

def _parse(pathToFile):
    with open(pathToFile) as f:
    myList = []
    for line in f:
        s = line.split()
        x, y, w = [int(v) for v in s]
        obj = CoresetPoint(x, y, w)
        myList.append(obj)
    return myList

这个函数被调用NumberOfRows/N 次,因为我只解析一小块数据来处理,直到没有剩下任何行。我的.txt 是几个千兆字节

我可以明显地看到我在循环中迭代了NumberOfLines 次,这是一个巨大的瓶颈和BAD。这引出了我的问题:

问题: 解析文件的正确方法是什么,最有效的方法是什么,以及在.txt 中以不同的方式组织数据?如果是这样,我应该如何在file 中组织data

【问题讨论】:

    标签: python python-2.7 file parsing optimization


    【解决方案1】:

    在 Python 中,您有一个名为 Pandas 的库来执行此操作。通过以下方式使用 Pandas 导入数据:

    import pandas as pd
    df = pd.read_csv('<pathToFile>.txt')
    

    如果文件太大而无法一起加载到内存中,您可以循环访问部分数据并一次加载它们。 Here 一篇非常好的博文,可以帮助您做到这一点。

    【讨论】:

    • 我不能将整个文件放在主存中,因为它非常大,这不会把它带到主存吗?
    • 是的,这会将它记入内存。它有多大?如果你真的需要,那么你应该进入分布式的东西,比如 Spark 的 RDD,但这需要一些时间。采样数据呢?看看这个问题:stackoverflow.com/questions/22258491/…,你可以遍历部分数据,这样就不会一次将所有数据加载到内存中。
    猜你喜欢
    • 2015-10-20
    • 2017-08-14
    • 2020-06-19
    • 2010-09-18
    • 2019-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-28
    相关资源
    最近更新 更多