Быстрое чтение 10000 двоичных файлов? - PullRequest
3 голосов
/ 04 марта 2011

У меня есть 10 000 двоичных файлов, названных так:

file0.bin

file1.bin

.......................

file10000.bin

Каждый из указанных файлов содержит ровно 391 значение с плавающей запятой (1564 байта на файл).

myЦель состоит в том, чтобы прочитать все файлы в массив python максимально быстрым способом.Если я открываю и закрываю каждый файл с помощью скрипта, это занимает много времени (около 8 минут!).Есть ли другие творческие способы чтения этих файлов БЫСТРО?

Я использую Ubuntu Linux и предпочел бы решение, которое может работать с Python.Благодаря.

Ответы [ 3 ]

2 голосов
/ 04 марта 2011

Если вы хотите еще быстрее, создайте ramdisk:

# mkfs -q /dev/ram1 $(( 2 * 10000)) ## roughly the size you need
# mkdir -p /ramcache
# mount /dev/ram1 /ramcache
# df -H | grep ramcache

теперь concat

# cat file{1..10000}.bin >> /ramcache/concat.bin ## thanks SiegeX

Затем разрешите ваш скрипт в этом файле

Так как я не проверялЯ поставил перед префиксом «#», чтобы не было несчастных случаев.Просто удалите их, если хотите, чтобы это работало.

Это вариант, но я призываю вас рассмотреть вопрос о комментариях, которые люди разместили прямо под вашим Q Возможно, вы могли бы получить лучшие результатыпроверяя, что ты делаешь неправильно, я не смог воспроизвести твою проблему со скоростью 8 минут.

0 голосов
/ 27 марта 2011

У вас есть 10001 файл (от 0 до 10000 включительно), и для запуска следующего требуется 8 минут?

try: xrange # python 2 - 3 compatibility
except NameError: xrange= range

import array

final= array.array('f')

for file_seq in xrange(10001):
    with open("file%d.bin" % file_seq, "rb") as fp:
        final.fromfile(fp, 391)

Что лежит в основе файловой системы?Сколько у вас оперативной памяти?Какой у тебя процессор и его скорость?

0 голосов
/ 04 марта 2011

Итерируйте их и используйте флаг оптимизации, вы также можете проанализировать их, используя pypy, он компилирует python с помощью JIT-компилятора, что позволяет несколько увеличить скорость.

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