2014-09-04 3 views
2

이 방법은 파이썬에서 잘 작동합니다 :선을 읽고 분할하는 빠른 파이썬 내장 메서드가 있습니까?

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

그러나, 그것은 또한 내가 두 번 각 라인을 읽을 것을 의미한다. 먼저 파일의 각 문자를 반복하고 개행 문자를 검색 한 다음 두 번째 줄의 각 문자를 반복하고 탭 공백을 검색합니다. 동일한 문자 집합을 두 번 반복하지 않고 선을 분할하는 기본 제공 방법이 있습니까? 이것이 어리석은 질문 인 경우에 사과하십시오.

+3

, 당신은 바로 '\의 t'로 분할 할을? – thefourtheye

+2

각 줄에 문자가 아닌 루핑을합니다. –

+1

@thefourtheye 예, 먼저 \ n을 사용하여 줄로 분할하고 \ t를 사용하여 필드로 분할하는 것을 원하지 않습니다. 각 줄마다 같은 수의 필드가 있다고 가정하면 실제로 itertools.islice를 사용하여 매우 직설적이어야합니다. 방금 깨달았습니다. –

답변

4

효율성면에서 걱정이된다면 아마 파이썬으로 프로그래밍하면 안됩니다. 그 루프에서 일어나는 대부분의 일은 C에서 일어난다 (CPython 구현을 사용한다면). 순수 파이썬 접근 방식을 사용하거나 매우 복잡한 루핑 구조를 만들지 않고 데이터를 처리하는보다 효율적인 방법을 찾지는 않을 것입니다.

+0

감사의 모래 언덕을 사용할 수 있습니다. 나는 이것이 옳은 대답이라고 생각한다. 어쩌면 나는 그 질문을 지워야 만한다. –

2

줄 넘김을 피하고 한 파일에서 전체 파일을 처리하려는 경우 일반 표현식을 사용합니다. 또한 정규식은 정말 빠릅니다.

지금 \ n은 하나 이상의 개행과 일치하고 파일을 거기에 분할합니다. 결과는 모든 라인이있는 파이썬리스트입니다. 다른 문자 (예 : 공백 (및 탭 및 줄 바꿈))로 분할하려는 경우 \ n +를 \ s +로 바꿉니다. 선으로하고 싶은 것에 따라 이것은 더 빠를 수 없습니다. 시간이 당신의 친구입니다.

비단뱀의 정규 표현식에 대한 자세한 : 당신은 의미 https://docs.python.org/2/library/re.html