Как пропустить некоторые фрагменты в python прочитанном коде файла? - PullRequest
0 голосов
/ 10 апреля 2020

У меня есть такой код:

chunk_size=512*1024 #512 kb
big_file = open(file, 'rb')
while True:
        data = big_file .read(chunk_size)
        if not data:
            break

Если я хочу прочитать только каждый 10-й элемент / каждый 5-й элемент, что-то вроде этого, Как я могу это сделать?

chunk_size=512*1024 #512 kb
big_file = open(file, 'rb')
counter = 0
while True:
        counter +=1
        if counter%5!=0:
           big_file.next(chunksize) #Just skip it, don't read it...HOW TO DO THIS LINE?
           continue #I want to skip the chunk, and in the next loop, read the next chunk.
        data = big_file .read(chunk_size)
        if not data:
            break

Скорость очень важна для меня в этом случае. Я сделаю это для миллионов файлов. Я делаю хеширование блоков.

1 Ответ

1 голос
/ 10 апреля 2020

Для этого можно использовать метод файла .seek(). Я отслеживаю счет текущего местоположения в файле с pos. Данные читаются только .read(chunk_size) каждые 5-й раз.

Поиск размера файла не является проблемой. data будет просто пустым, поэтому мы ломаемся, если ничего не читалось.

chunk_size=512*1024 #512 kb
big_file = open("filename", 'rb')
counter = 0
pos = 0

while True:
    counter += 1
    if counter % 5 == 0:
        big_file.seek(pos)
        data = big_file.read(chunk_size)
        if not data:
            break
        print(data.decode("utf-8")) # here do your processing

    pos += chunk_size
...