zlukfo@gmail.com
  • Публикации
  • Темы
  • Ключевые слова
  • Архив

Python: получение строк из файла в обратном порядке

Необходимость возникла при решении одной практической задачи: перед загрузкой из скрипта python новых записей в БД проверялась уникальность каждой записи. Проверка проводилась по хешам, которые списком хралились в текстовом файле. Природа записей была такова, что вероятность того, что проверяемая запись уже существует в БД уменьшалась со временем.

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

В итоге возникла идея написать функцию, возвращающую строки, начиная с конца файла. Сразу замечу, что функция писалась под конкретную задачу, поэтому имеет ограничение - длины всех строк имеют одинаковый размер (длина хеша).

Вот эта функция

def getStringFromEndFile(filename, string_len, delimiter_line_len=1, emty_line_in_end=False):
        with codecs.open(filename, 'r', 'utf-8') as hk:
                if emty_line_in_end:
                        hk.seek(0,2)
                else:
                        hk.seek(1,2)
                while hk.tell()>string_len:
                        hk.seek(-(string_len+delimiter_line_len),1)
                        yield hk.read(string_len)
                        hk.seek(-string_len,1)

параметры:

  • filename - имя файла,
  • string_len - длина строки,
  • delimiter_line_len - длина разделителя: новая строка, любая последовательность символов, их комбинации, не важно что, лишь бы все разделитили имели одинаковую длину
  • emty_line_in_end - заканчивается ли файл пустой строкой (True / False)

пример использования:

for line in getStringFromEndFile('/tmp/hash.key',3):
        print line

Опубликовано

авг. 22, 2016

Тема

Программирование на python

Ключевые слова

  • частные задачи 1
  • python 14
  • zlukfo@gmail.com - Публикации на тему разработки web-приложений
  • Все авторские права защищены
  • Автор и разработчик блога zlukfo. Theme: Elegant by Talha Mansoor