【问题标题】:Writing data into a CSV within a loop Python在循环 Python 中将数据写入 CSV
【发布时间】:2017-02-15 21:36:41
【问题描述】:

我目前正在处理 Dstl 卫星 kaggle 挑战。在那里我需要创建一个 csv 格式的提交文件。 csv 中的每一行包含:

Image ID, polygon class (1-10), Polygons

多边形是一个很长的条目,包括开始、结束和开始等。

多边形是使用一种算法创建的,一次一个类,一次一张图片(429 张图片,每张 10 个类)。

现在我的问题与计算时间和最佳实践有关:如何最好地将我创建的多边形数据写入 csv?我是否在开始时打开 csv,然后在遍历类和图像时将每一行写入文件?

或者我应该将数据保存在列表或字典或其他东西中,然后将整个内容一次写入 csv 文件?

问题是,我不确定写入 csv 文件的速度有多快。此外,由于该算法在计算上已经相当消耗,我想省去我的电脑将所有数据保存在 RAM 中的麻烦。

而且我猜想立即将数据写入 csv 会减少使用的 RAM,对吧?

所以你说磁盘操作很慢。这到底是什么意思呢?当我在创建数据时实时写入 csv 每一行时,这会减慢我的程序吗?因此,如果我将整个列表写入一个比写入一行更快的 csv 文件,那么再次计算一个新的数据行?所以这意味着,计算机在下一个动作开始之前等待一个动作完成,对吧?但是,如果我等待整个数据累积,是什么让这个过程更快?反正同样的行数要写入csv,为什么我一行一行写会慢?

【问题讨论】:

    标签: python loops csv time export-to-csv


    【解决方案1】:

    如何最好地将我创建的多边形数据写入 csv?我是否在开始时打开 csv,然后在迭代类和图像时将每一行写入文件?

    我怀疑大多数人会将数据收集到一个列表或字典中,然后在最后全部写出来。但是,如果您不需要对其进行额外处理,是的 - 将其发送到磁盘并释放资源。

    而且我猜想立即将数据写入 csv 会减少使用的 RAM,对吧?

    可以,但不会影响 CPU 使用率;只是减少 RAM 的使用,尽管它确实取决于 Python GC 的时间。你真的不应该担心这样的细节。首先,获得准确的输出。

    【讨论】:

      【解决方案2】:

      首先,使用 csv 库。 文档https://docs.python.org/2/library/csv.html (py2) 或https://docs.python.org/3/library/csv.html (py3)

      现在,使用这个库,您可以获取类似列表的对象列表或 dicts 列表(其中键是 csv 的标题)并将它们写入文件。这几乎可以肯定是正确的方法。如果你有足够的数据,你已经为 python 进程用尽了你的内存,那么你可能想回去再想一想,但是有 429 * 10 = 4290 行,这可能不会发生。

      而且我猜想立即将数据写入 csv 会减少使用的 RAM,对吧?

      磁盘访问通常是一个相对较慢的操作,因此任何最大化磁盘访问以节省内存使用的方法都是值得怀疑的。

      【讨论】:

        猜你喜欢
        • 2015-11-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-12
        • 2019-07-20
        • 1970-01-01
        相关资源
        最近更新 更多