Как писать и обновлять .txt файлы с помощью python? - PullRequest
0 голосов
/ 26 июня 2019

Я написал скрипт, который извлекает данные биткойнов и сохраняет их в файлах .txt или, в случае, если файлы .txt существуют, обновляет их. Файлы .txt - это узлы и отношения, соединяющие узлы для neo4j.

В начале скрипта:

  1. Проверяет, существуют ли файлы, открывает их и добавляет новые строки ИЛИ
  2. Если файлы не существуют, скрипт создает их и начинает добавлять строки.

Файлы .txt постоянно открыты, скрипт записывает новые данные. Файлы .txt закрываются, когда все данные записываются или я прекращаю выполнение.

Мой вопрос:

Должен ли я открывать, писать, закрывать каждый файл .txt для каждой итерации и для каждого файла .txt?

или

Должен ли я оставить это так, как сейчас; откройте .txt файлы, сделайте всю запись, когда запись закончится, закройте .txt файл

Я сохраняю данные из 6013 блоков. Каким образом можно минимизировать риск повреждения данных, записанных в файлах .txt?

Ответы [ 3 ]

0 голосов
/ 26 июня 2019

Запустите тест и убедитесь сами в типичном ответе на этот вопрос.

Тем не менее, открытие и закрытие файла имеет свою стоимость. Python должен выделить память для буфера и структур данных, связанных с файлом, и вызвать некоторые функции операционной системы, например, системный вызов open, который, в свою очередь, будет выполнять поиск файла в кэше или на диске.

С другой стороны, существует ограничение на количество файлов, которые программа, пользователь, вся система и т. Д. Могут открыть одновременно. Например, в Linux значение в /proc/sys/fs/file-max обозначает максимальное количество дескрипторов файлов, которое будет выделено ядром. Когда вы получаете много сообщений об ошибках, связанных с исчерпанием файловых дескрипторов, вы можете захотеть увеличить это ограничение ( source ). Если ваша программа работает в такой ограничительной среде, было бы хорошо, чтобы файл оставался открытым только при необходимости.

0 голосов
/ 03 июля 2019

Хранение файлов будет быстрее. В комментариях вы упомянули, что «Потеря ранее записанных данных не вариант». Вероятность повреждения файлов выше для открытых файлов, поэтому открывать и закрывать файл на каждой итерации более надежно. Существует также возможность сохранять данные в некотором буфере и записывать / добавлять буфер в файл, когда все данные получены или по прерыванию пользователя / системы или по таймауту сети.

0 голосов
/ 26 июня 2019

Я думаю, что сохранение файла будет более эффективным, потому что python не нужно будет искать файл и открывать его каждый раз, когда вы хотите прочитать / записать файл.

Я думаю, это должно выглядетькак это

with open(filename, "a") as file:
    while True:
        data = # get data
        file.write(data)
...