2014-09-04 1 views
2

Этот метод отлично работает в Python:Существует ли быстрый встроенный в Python метод для чтения строк, а затем их разделения?

with open(file) as f: 
    for line in f: 
     for field in line.rstrip().split('\t'): 
      continue 

Однако, это также означает, что я прочитал каждую строку дважды. Сначала я перебираю каждый символ файла и выполняю поиск символов новой строки, а второй - через каждый символ строки и ищет области табуляции. Есть ли встроенный метод разделения строк, избегая одновременного циклического перебора одного и того же набора символов? Извините, если это глупый вопрос.

+3

Вы имеете в виду, вы хотите разделить сразу с '\ Т *? – thefourtheye

+2

Вы перебираете каждую строку, а не символы. –

+1

@thefourtheye Да, я не хочу беспокоиться о первом расщеплении на строки с \ n и затем разбиваться на поля с \ t. Учитывая, что каждая строка имеет одинаковое количество полей, она должна быть довольно простой с itertools.islice, которую я только что понял. –

ответ

4

Если вы беспокоитесь об этом уровне эффективности, вы, вероятно, не должны программировать на Python. Большая часть того, что происходит в этом цикле, происходит в C (если вы используете реализацию CPython). Вы не сможете найти более эффективный способ обработки ваших данных с использованием чистого подхода python или без создания очень сложной структуры цикла.

+0

Спасибо Дюны. Я думаю, что это правильный ответ. Может быть, мне просто нужно удалить вопрос ... –

2

Если бы я хотел избежать петли над строками и обработать весь файл за один раз, я бы пошел с регулярным выражением. Кроме того, регулярные выражения должны быть очень быстрыми.

import re 
regexp = re.compile("\n+") 
with open(file) as f: 
    lines = re.split(regexp, f.read()) 

Теперь \ n соответствует одной или нескольким символам новой строки и разбивает файл там. Результатом является список python со всеми строками. Если вы хотите разделить другой символ, например пробелы (и вкладки и новые строки), вы замените \ n + на \ s +. В зависимости от того, что вы хотите делать с линиями, это может быть не быстрее. Таймвит - твой друг.

Больше на питоны регулярное выражение: https://docs.python.org/2/library/re.html

Смежные вопросы