2016-07-19 6 views
0

나는 당신의 컴퓨터에있는 파일을 검색하는 다음과 같은 코드를 작성하지 :파이썬 파일 검색 프로그램은 충분히 빨리

이 프로그램을다시피
import os, sys 
import win32api 

x=raw_input("Enter file name: ") 

drives = win32api.GetLogicalDriveStrings() 
drives = drives.split('\000')[:-1] 
for drive in drives: 
    for folderName, subfolders, filenames in os.walk(drive): 
     for filename in filenames: 
      if x.upper() in filename: 
       print"FILE FOUND!" 
       print('FILE INSIDE ' + folderName + ': '+ filename) 
      elif x.lower() in filename: 
       print"FILE FOUND!" 
       print('FILE INSIDE ' + folderName + ': '+ filename) 
      elif x.capitalize() in filename: 
       print"FILE FOUND!" 
       print('FILE INSIDE ' + folderName +': '+ filename) 
a=raw_input("Press any key to exit.") 
sys.exit() 

빠른 충분하지 않습니다.

그럼 누가이 프로그램을 더 빠르고 효율적으로 만들 수 있습니까?

감사합니다!

+0

"빠름"이란 무엇을 의미합니까? 얼마나 빨리 당신이 그것을 현재와 비교하고 싶습니까? 하드 드라이브 액세스는 일반적으로 매우 느립니다. 'os.walk()'도 Python 3.5에서 훨씬 더 빨리 업데이트되었습니다. 따라서 Python 2를 사용하고 있다면 기여할 것입니다. –

+0

속도면에서별로 변하지 않을 것이지만'if's는 상호 배타적이라는 점을 지적하기 만하면 두 가지를 만들 수 있습니다. elif's –

답변

1

이 프로그램을 많이 향상시킬 수는 없습니다. 정적 파일 검색은 그런 종류의 일을해야 할 것입니다. 많은 복잡성을 추가하고 병렬화함으로써 한 번에 파일 시스템의 다른 부분을 걷고 "행운의 히트"를 앞당길 수 있으므로 더 빠르게 작업 할 수 있습니다.

파일 시스템을 빠르게 검색 할 수 있도록 설계된 응용 프로그램과 유틸리티는 일반적으로 데이터베이스의 모든 파일 시스템 내용을 인덱싱하는 데 사용되며 계속해서 백그라운드에서 또는 하루 중 고정 시간에 작업을 수행합니다. 따라서 검색이있을 때, 그들은 단지 그 데이터베이스에 대한 쿼리를 수행합니다.

그러나이 솔루션을 사용하면 작은 프로그램의 복잡성이 여러 번 증가 할 수 있습니다. 또한이 질문에 답을 쓰기에는 너무 복잡합니다.

+0

답을 고맙게 생각합니다. 하지만 첫 번째 단락에서 예제를 통해 아이디어에 대해 더 자세히 설명해 주시겠습니까? 나는 그것이 흥미있는 것을 안다. – Vin

1

인쇄 명령문의 수를 줄이면 속도가 크게 높아집니다. 파일을 추적해야하는 경우 대신 결과를 로그 파일에 기록 할 수 있습니다.