빠른 연구를 수행 할 수 있도록 파일 시스템 (파일 이름 만)을 저장/캐싱합니다. à la Everything입니다. 따라서 OS의 내장 파일 검색 GUI를 사용하고 싶지 않습니다.파일 시스템 용 데이터 구조
내가 함께 할 :
import os
L = []
for root,dirs,files in os.walk(PATH):
L.append([root, files])
과 결과는 다음과 같다 :
[['D:\\', ['a.jpg', 'b.jpg']],
...
['D:\\Temp12', ['test.txt', 'test2.txt']]]
문제는 L
요소 수백만 포함 할 때 연구를 수행하는 것은 너무 많은 시간을 소요한다는 것입니다 :
query = 'test2' #searching for filename containg this text
for dir in L:
for f in dir[1]:
if query in f:
print '%s found: %s' % (query, os.path.join(dir[0],f))
사실, 이것은 매우 순진 검색입니다 그 사람 전체 목록 항목을 찾을 수 있습니다.
쿼리를보다 빠르게 만드는 방법은 무엇입니까?
아마도 전체 텍스트 연구를 수행하는 데 올바른 데이터 구조가 아닌 것 같습니다. 트리 구조입니까? 리스트에
파이썬에서 나는 '사전'이 당신이 찾고있는 것이라고 생각한다! – Acepcs
@Acepcs : Dict '{' 'D : \\': [ 'a.jpg', 'b.jpg'], ..., 'D : \\ Temp12': [ 'test.txt ','test2.txt ']}', 검색을 수행하기 위해 수천 개의 키/값을 반복해야 할 것입니다 ... 당신이 염두에 두었던 것을 정확하게 할 수 있습니까? – Basj
정확히 완전한 알고리즘이 내 마음 속에 들어 있습니다. os에서 디렉토리를 탐색 할 때, 파일 이름의 사전을 만들고, 각 키는 알파벳의 문자이며, 각 값은'{ 'a'와 같이 그 문자로 시작하는 파일 이름 목록입니다. [ 'a3.jpg', 'ab.jpg'], 'b': [ 'banana.gif', 'bad.jpg']}'이므로 접두사 키를 작성하여 반복에 많은 시간을 절약 할 수 있습니다. 데이터 크기가 정말로 큰 경우 중첩 된 접두어 사전을 만들 수 있습니다. Python으로 구현 된 트리 (특정 정도)를 구현할 수 있습니다. – Acepcs