在循环中将数据写入 CSV Python
Writing data into a CSV within a loop Python
我目前正在参加 Dstl 卫星 kaggle 挑战赛。我需要创建一个 csv 格式的提交文件。 csv 中的每一行包含:
Image ID, polygon class (1-10), Polygons
多边形是一个很长的条目,有开始、结束和开始等。
多边形是使用一种算法创建的,一次创建一个 class,一次创建一张图片(429 张图片,每张 10 classes)。
现在我的问题与计算时间和最佳实践有关:如何最好地将我创建的多边形数据写入 csv?我是否在开始时打开 csv,然后在遍历 classes 和图像时将每一行写入文件?
或者我应该将数据保存在列表或字典或其他东西中,然后立即将整个内容写入 csv 文件?
问题是,我不确定写入 csv 文件的速度有多快。此外,由于该算法在计算上已经相当耗时,我想省去我的电脑将所有数据保存在 RAM 中的麻烦。
而且我想立即将数据写入 csv 会导致使用更少的 RAM,对吧?
所以你说光盘运行很慢。这到底是什么意思呢?当我在创建数据时将每一行写入 csv 时,这会减慢我的程序吗?因此,如果我将整个列表写入一个 csv 文件,这比写一行要快,然后再次计算一个新的数据行?那么这意味着,计算机会等待一个动作完成,然后才能开始下一个动作,对吗?但是话又说回来,如果我等待整个数据积累起来,是什么让这个过程更快?无论如何,必须将相同数量的行写入csv,为什么我逐行写入会更慢?
How do I best write the data of the polygons that I create into the csv? Do I open the csv at the beginning and then write each row into the file, as I iterate over classes and images?
我怀疑大多数人会将数据收集到列表或字典中,然后在最后将其全部写出。但是,如果您不需要对其进行额外的处理,是的——将其发送到磁盘并释放资源。
And I guess writing the data into the csv right away would result in less RAM used, right?
是的,会,但不会影响 CPU 使用;只是减少 RAM 使用量,尽管它确实取决于 Python GC 的时间。你真的不应该担心这样的细节。首先要获得准确的输出。
首先,使用csv库。
文档 https://docs.python.org/2/library/csv.html (py2)
或 https://docs.python.org/3/library/csv.html (py3)
现在,使用此库,您可以获取 list-like objects 列表或字典列表(其中键是 csv 的 headers )并将它们写入一份文件。这几乎可以肯定是正确的方法。如果您有足够的数据,以至于 python 过程的内存用完了,那么您可能想回头再考虑一下,但是对于 429 * 10 = 4290 行,这可能不会发生.
And I guess writing the data into the csv right away would result in less RAM used, right?
磁盘访问通常是一个相对较慢的操作,因此任何最大化磁盘访问以节省内存使用的方法都是有问题的。
我目前正在参加 Dstl 卫星 kaggle 挑战赛。我需要创建一个 csv 格式的提交文件。 csv 中的每一行包含:
Image ID, polygon class (1-10), Polygons
多边形是一个很长的条目,有开始、结束和开始等。
多边形是使用一种算法创建的,一次创建一个 class,一次创建一张图片(429 张图片,每张 10 classes)。
现在我的问题与计算时间和最佳实践有关:如何最好地将我创建的多边形数据写入 csv?我是否在开始时打开 csv,然后在遍历 classes 和图像时将每一行写入文件?
或者我应该将数据保存在列表或字典或其他东西中,然后立即将整个内容写入 csv 文件?
问题是,我不确定写入 csv 文件的速度有多快。此外,由于该算法在计算上已经相当耗时,我想省去我的电脑将所有数据保存在 RAM 中的麻烦。
而且我想立即将数据写入 csv 会导致使用更少的 RAM,对吧?
所以你说光盘运行很慢。这到底是什么意思呢?当我在创建数据时将每一行写入 csv 时,这会减慢我的程序吗?因此,如果我将整个列表写入一个 csv 文件,这比写一行要快,然后再次计算一个新的数据行?那么这意味着,计算机会等待一个动作完成,然后才能开始下一个动作,对吗?但是话又说回来,如果我等待整个数据积累起来,是什么让这个过程更快?无论如何,必须将相同数量的行写入csv,为什么我逐行写入会更慢?
How do I best write the data of the polygons that I create into the csv? Do I open the csv at the beginning and then write each row into the file, as I iterate over classes and images?
我怀疑大多数人会将数据收集到列表或字典中,然后在最后将其全部写出。但是,如果您不需要对其进行额外的处理,是的——将其发送到磁盘并释放资源。
And I guess writing the data into the csv right away would result in less RAM used, right?
是的,会,但不会影响 CPU 使用;只是减少 RAM 使用量,尽管它确实取决于 Python GC 的时间。你真的不应该担心这样的细节。首先要获得准确的输出。
首先,使用csv库。 文档 https://docs.python.org/2/library/csv.html (py2) 或 https://docs.python.org/3/library/csv.html (py3)
现在,使用此库,您可以获取 list-like objects 列表或字典列表(其中键是 csv 的 headers )并将它们写入一份文件。这几乎可以肯定是正确的方法。如果您有足够的数据,以至于 python 过程的内存用完了,那么您可能想回头再考虑一下,但是对于 429 * 10 = 4290 行,这可能不会发生.
And I guess writing the data into the csv right away would result in less RAM used, right?
磁盘访问通常是一个相对较慢的操作,因此任何最大化磁盘访问以节省内存使用的方法都是有问题的。