在循环Python

时间:2017-02-15 21:36:42

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

我目前正致力于Dstl卫星讨价还价的挑战。在那里,我需要创建一个csv格式的提交文件。 csv中的每一行都包含:

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

多边形是一个非常长的条目,包括开始和结束以及开始等。

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

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

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

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

我想我马上将数据写入csv会导致使用较少的RAM,对吗?

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

2 个答案:

答案 0 :(得分:2)

  

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

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

  

我想我马上将数据写入csv会导致使用较少的RAM,对吗?

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

答案 1 :(得分:0)

首先,使用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,对吗?

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