"items"목록에 하위 디렉토리를 추가하려고 시도했으며 아래 코드를 사용하여이 작업을 완료했습니다.os.walk를 사용하여 목록에 추가
root, dirs, files = iter(os.walk(PATH_TO_DIRECTORY)).next()
items = [{
'label': directory, 'path': plugin.url_for('test')
} for count, directory in enumerate(dirs)]
위의 작동하지만 놀라 울 정도로 느립니다. os.walk는 매우 빠르지 만 어떤 이유로 루프가 느립니다.
나는 아래for root, dirs, files in os.walk(PATH_TO_DIRECTORY):
처럼 os.walk 동안 "항목"목록에 추가, 한 번에 모든 것을하려고 노력하지만 꽤에 디렉토리를 추가 할 수있는 권한 구문을 가져올 수 없습니다 명부.
os.walk의 모든 예제는 온라인으로 찾을 수 있는데, 간단히 말해서 print
의 dir 또는 파일을 사용합니다.이 예제는 사용 예로서 좋지만 실제로는별로 유용하지 않습니다.
저는 파이썬을 처음 접했을뿐입니다. 어떤 사람들은 첫 번째 예제 에서처럼 별도의 루프없이 목록을 얻는 방법을 조언 할 수 있습니까?
(내가 파이썬에서 "디렉토리"또는 뭔가하지리스트라고 알고 있습니다. 그냥 배열을 호출과 함께 할 수하자 ... :-)
감사
눈부신 속도가 눈에 띄게 빨라진다.관심 밖의 이유로'plugin_url_for = plugin.url_for'을하고 루프에서 변수를 사용 했습니까? – superphonic
루프 내에서'plugin.urL_for '를 사용하면 인터프리터는 각 반복에서 메소드 분석을 수행해야합니다. 메서드를 로컬 변수에 저장 한 다음 해당 변수를 통해 메서드에 액세스하면 메서드 조회 결과를 캐싱 할 수 있습니다. – Alp
@Alp 물론, 그 말이 맞는 ... – superphonic