Есть ли лучший способ временно хранить много выходных данных для текстового файла (для размещения в столбцах и строках), кроме использования нескольких временных файлов? - PullRequest
0 голосов
/ 01 апреля 2019

Мне нужно хранить огромное количество числовых данных, разделенных запятыми, в текстовом файле. Этот текстовый файл будет выводом скрипта, который будет выполнять вычисления.

Моя проблема заключается в методе - он кажется слишком запутанным и включает в себя множество временных файлов (у меня их пять), которые, как я гарантировал, содержат точное количество строк для каждой точки данных и которые будут только быть объединены в один файл после завершения всех расчетов. Мой код настолько запутан, что мне даже приходится использовать deque один раз, чтобы вырезать лишние строки из временного файла.

Я использую этот шаблон несколько раз на протяжении всего сценария

o = open('%s_outcombined.xvg'%outfile, 'a+')
fh = open('%s_outfinal.xvg'%outfile, 'rb')
fh2 = open('%s_outfor_diff_calcs.xvg'%outfile, 'rb')
for line in fh.readlines():
   o.write(line.strip('\r\n') + fh2.readline().strip('\r\n') + '\n')
fh.close()
fh2.close()
o.close()

для создания и объединения указанных временных файлов.

Ожидаемые результаты:

  • Отдельный текстовый файл с числовыми значениями, разделенными запятыми - он будет получен из расчетов, выполненных для входного файла 12 ГБ.

  • Метод, который не предусматривает использование нескольких временных файлов (или, если есть способ сделать их скрытыми, мне бы очень хотелось знать)

  • Метод хранения данных, который не занимает много времени

Фактические результаты:

  • Несколько временных файлов, грязный код

Мне интересно, занимает ли меня больше времени, если полагаться на списки для хранения огромного количества данных (размер входного файла для расчета составляет 12+ ГБ), или же мне следует придерживаться моего текущего метода, ИЛИ если у вас есть лучшие идеи Я был бы очень признателен.

1 Ответ

1 голос
/ 01 апреля 2019

Вы можете выполнять работу с использованием пакетов, поскольку 12 ГБ большую часть времени можно хранить в памяти.Что-то вроде обработки первых 200 строк с сохранением их в памяти и сохранения их в выходной файл, а затем переходите к следующим 200 строкам, пока не дойдете до конца.

Псевдокод:

outputFile = new File("output")
inputFile = new File("input")

row = inputFile.readLine() # first line

while row != null:
   if outputFile.readLine() == null: # so we don't recalculate already calculated data
      columns = row.split(",")
      columns = doFirstCalculation(columns)
      columns = doSecondCalculation(columns)
      outputFile.appendLine(columns.join(","))
   else:
      print("skipped line since already calculated")
   row = inputFile.readLine() # next line

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...