Форум сайта python.su
0
Здравствуйте Уважаемые!
Обрабатываю двоичный файл, специализированного формата(формат предоставить не предстваляется возможным), но суть его такова при встрече метки из двух байт завершается некая запись, которую необходимо парсить и так пока не конец файла.
for line in open(soiurce_file,"rb").readlines():
#print "in, val: " + str(index) + ", " + line
new_line.extend([char for char in line])
Офлайн
13
readlines читает весь файл как текстовый, разбивая его на строки. Оно вам надо? Читайте блоками, используя read и все будет хорошо.
Офлайн
32
конвертнуть его в sqlite
Офлайн
0
sqlite не работал не знаю как это будет выглядеть изучать времени нет, да да как обычно “Ни когда нет времени сделать все грамотно, зато потом уйма что бы все переделать” :-)
Нашел, собственно:
fh = file(source_file,"rb")
a = array.array('b')
a.read(fh, 100000)
while a:
a = array.array('b')
try:
a.read(fh, 100000)
except Exception, exc:
if str(exc) == "not enough items in file":
break
Офлайн
0
все перегрелся, теперь из массива не могу нормальные данные достать, все перековеркалось.
Офлайн
0
Можно просто
for line in open(soiurce_file,"rb")
Офлайн
0
пробовал ощутимого эффекта не заметил.
Офлайн
0
У меня разбор бинарников выглядит примерно так :
from struct import unpack
f = open(filename, 'rb')
while ok:
head = f.read(20) ## 20 = calcsize('>L8cL4c')
if len(head)==0:
ok = 0;
else:
z, name, datalen, type = unpack('>L8sL4s', head)
if datalen == 0 and ...
....
Офлайн
0
Если все было так просто. За идею спасибо.
Ситуация в том, что конец конкретной записи определяется двух байтовой меткой, запись переменной длинны. т.е необходимо найти эту метку и лишь потом считать запись … и так много-много раз … до конца файла. Разбить файл на метки не получиться … вот это может проканать …
Отредактировано (Фев. 2, 2011 12:14:52)
Офлайн
0
Я бы попробовал тогда использовать numpy.memmap и сразу определить положение всех меток.
Memory-mapped files are used for accessing small segments of large files on disk, without reading the entire file into memory. Numpy's memmap's are array-like objects.
Офлайн