2017-11-30 2 views
0

텍스트 파일의 정의되지 않은 이름을 가진 디렉토리가 있다고 가정 해 보겠습니다. 그래서 각 세트에 얼마나 많은 단어가 들어 있는지 확인하고 싶습니다. 이 파일들은 거대한 크기를 가질 수 있기 때문에 파이썬에서 가장 효율적인 방법이 무엇인지 궁금합니다. 메모리에서 파일을 처리하는 가장 좋은 방법 Python

for file in files: 
    with open(file) as f: 
     content = f.readlines() 
     for word in words: 
      if word in content: 
       count+=1 

내 질문

은 다음과 같습니다 :

  1. 가 어떻게 메모리에 큰 파일을 처리해야이 고전적인 접근 방식은 이상적인 하나 보이지 않는다?
  2. 이 복잡도는 O (n * m)이고 n = # 파일이고 m = # 단어인데이를 줄일 수 있습니까? 아니면 저를 도울 수있는 데이터 구조가 있습니까?

답변

3

첫 단계의 readlines()를 사용하지 않는 것 - 이는 한번에 메모리로 모든 파일의 내용을 덤프 때문에 시간 복잡도는 따로 메모리 복잡도 (n 개 *의 m) 직선 O 달려 . 대신 readline()을 사용하여 EOF까지 줄 단위로 읽음으로써 줄일 수 있습니다.

시간적으로, 당신은 일종의 어쩌면 사전을 찾고 있습니다. 아마도 컬렉션입니다. 카운터. 이미 발생한 단어를 O (1) 검색 할 수 있습니다.

+0

네, 메모리 복잡성에 관해서는 맞지만 readline을 사용하면 많은 양의 읽기가 생성 될 것입니다. 그저 단순한 라인 이상을 저장할 수있는 버퍼를 사용하면 더 좋을 것입니다 (또는 readline 자체만으로도 가능합니다). 하지만 시간에 관해 당신이 말하고자하는 것을 따르지 않고 있습니다 .. – m33n

+1

Readlines()가 readline()을 반복적으로 호출하므로 동등합니다. 그것은리스트 이해력과 생성자 표현의 차이와 비슷합니다. 최종 결과는 동일하지만 모든 것을 하나씩 또는 단편적으로 수행합니다. Time-dicts를 사용하면 이미 증가한 단어를 찾기 위해 이미 계산 한 단어 목록을 반복하지 않아도됩니다. 그것은 해시 맵입니다. – jkm

관련 문제