2017-02-15 2 views
0

В настоящее время я работаю над вызовом спутника DSTL. Там мне нужно создать файл представления, который находится в формате csv. Каждая строка в CSV содержит:Запись данных в CSV в цикле Python

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

многоугольников являются очень длинным входом с началом и концами и т.д. начинается

многоугольники создаются с помощью алгоритма, для одного класса в то время, для за один раз (429 снимков, по 10 классов).

Теперь мой вопрос связан с временем вычисления и наилучшей практикой: как лучше всего написать данные о полигонах, которые я создаю в csv? Я открываю csv в начале, а затем записываю каждую строку в файл, поскольку я перебираю классы и изображения?

Или я должен сохранить данные в списке или словаре или что-то еще, а затем написать все это в файл csv сразу?

Дело в том, что я не уверен, насколько быстро записывается в CSV-файл. Кроме того, поскольку алгоритм уже довольно усваивает вычислительные средства, я хотел бы сохранить мой компьютер в сохранности всех данных в ОЗУ.

И, я думаю, запись данных в csv сразу приведет к уменьшению использования ОЗУ, верно?

Итак, вы говорите, что операции на диске медленные. Что именно это значит? Когда я пишу в CSV, каждая строка живет, когда я создаю данные, это замедляет мою программу? Итак, если я напишу целый список в файл csv, который будет быстрее, чем писать строку, а затем снова вычислить новую строку данных? Это значит, что компьютер ждет завершения действия до того, как начнется действие следующего действия, верно? Но, тем не менее, что делает процесс быстрее, если я жду, когда все данные накапливаются? Во всяком случае, такое же количество строк должно быть записано в csv, почему это будет медленнее, если я сделаю это по очереди?

ответ

2

Как лучше всего записать данные из многоугольников, которые я создаю в csv? Я открываю csv в начале, а затем записываю каждую строку в файл, поскольку я перебираю классы и изображения?

Я подозреваю, что большинство людей собирают данные в списке или, возможно, словарь, а затем записывают все в конце. Но если вам не нужно делать дополнительную обработку, да - отправьте его на диск и освободите ресурсы.

И, я думаю, запись данных в csv сразу приведет к уменьшению использования ОЗУ, верно?

Да, это было бы, но это не повлияет на использование ЦП; просто уменьшите использование ОЗУ, хотя это зависит от того, когда Python GC их. Вы действительно не должны беспокоиться о таких деталях. Получите точный вывод, в первую очередь.

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 сразу приведет к уменьшению использования ОЗУ, верно?

Доступ к диску в общем случае является относительно медленной операцией, поэтому все, что максимизирует доступ к диску для экономии использования памяти, является сомнительным.

Смежные вопросы