Как эффективно обрабатывать строку в Python построчно? - PullRequest
2 голосов
/ 30 марта 2012

Я получил несколько многострочных данных по HTTP и поместил их в одну строку. Мне нужно отфильтровать только строки, содержащие конкретные ключевые слова и записать его в файл.

Как мне обработать эти отдельные строки без чрезмерного использования памяти? То есть без разделения строки ввода на новую строку и последующей обработки списка?

Также приветствуются решения для Jython.

Ответы [ 4 ]

1 голос
/ 30 марта 2012

Поскольку итераторной версии str.split не существует, лучше всего эмулировать ее с помощью модуля re:

for line in re.finditer('.*?\n', data):
   # do stuff

Однако обратите внимание, что это оставит завершающие символы новой строки на месте,в отличие от обычного split метода.

0 голосов
/ 03 апреля 2012

Я теперь фактически проверил требования к памяти для использования data.split ('\ n'), re.finditer ('. *? \ N', data) и StringIO.readline () в Jython. Я был удивлен, обнаружив, что split () не увеличивает используемую память (PS Old Gen), StringIO занял второе и третье место.

Jython 2.5.1+:
  split()  +0 x data
  StringIO +2 x data
  re       +4 x data

Jython 2.2.1:
  split()  +0 x data
  re       +2 x data
  StringIO +7 x data

StringIO не использовал дополнительную память после вызова .write (), т. Е. Похоже, что он поддерживается той же строкой в ​​Jython.

Я не проверял скорость.

0 голосов
/ 30 марта 2012

Используйте модуль StringIO для доступа к вашей строке как объекту, подобному файлу.Затем вы можете перебирать строки так же, как и для файла.

0 голосов
/ 30 марта 2012

Вы можете попробовать использовать скомпилированные регулярные выражения python re

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