2012-10-23 2 views
3

python 비교 디렉토리와 관련된 stackoverflow에서 많은 질문을 읽었습니다. 그러나, 내 현재의 질문은 조금 다릅니다.
두 개의 다른 버전 릴리스 패키지 내용이 들어있는 두 개의 디렉터리가 있습니다. 이제 내용이 동일한 지 비교하기 위해 비교하고 싶습니다. 그러나 파일에는 버전 이름이 들어 있지 않은 파일이 거의 없습니다. 이제는 파일을 비교하고 결론을내는 최상의 방법입니다 (버전 차이는 제외하고 모든 파일이 일치 함).python - 두 디렉토리를 재귀 적으로 비교하고 등가 구조 플래그 지정

예를 들어

:
버전 V1R1C1V2R3C1이 구조

pmt> find . -name "*" 
. 
./c1 
./c1/c2 
./c1/c1_V2R3C1.cfg 
./a1 
./a1/a1_V2R3C1.cfg 
./a1/a2 
./a1/a2/a1a2_V2R3C1.cfg 
./b1/a_best_file.txt 
./b1/b2/a_test_file.txt 
./b1/b2/b1b2_V2R3C1.cfg 
./a_V2R3C1.cfg 

,369 이하로 포함 할 수있다

pmt> find . -name "*" 
. 
./c1 
./c1/c2 
./c1/c1_V1R1C1.cfg 
./a1 
./a1/a1_V1R1C1.cfg 
./a1/a2 
./a1/a2/a1a2_V1R1C1.cfg 
./b1/a_best_file.txt 
./b1/b2/a_test_file.txt 
./b1/b2/b1b2_V1R1C1.cfg 
./a_V1R1C1.cfg 

버전 아래와 같이 디렉토리 구조를 포함

위의 경우, 프로그램은 equivalent 구조로 플래그해야합니다.

예를 들어, 디렉토리 구조를 캐시 (dict)로 읽어 들이고 버전 정보를 추출한 후 비교하는 등 몇 가지 해결책을 생각해 볼 수 있습니다.하지만 두 가지 이유 때문에 완전히 효과적인 메커니즘이 아님 1. inbuilt 디렉토리를 사용하지 않습니다 2.The 여러 읽기/찢어/비교 (특히 거대한 디렉토리 트리 구조와 비용)에 바인딩됩니다 비교할 수 있습니다.

나는 위의 것보다 간단하고 효율적인 아이디어를 찾고 있습니다.


PS : (위의 예와 달리 버전 제외) 차이의 경우
1. 내가 diffed 목록을 얻기 위해 좌/우 등을 사용하고 싶습니다.
2. 두 디렉토리 모두에서 버전 이름 인 것으로 가정 할 수 있습니다 (첫 번째 경우에는 V1R1C1, 두 번째 경우에는 V2R3C1과 같음).

+1

'diff'를 사용했을까요? 이것은 무엇을 위해 설계되었습니다. diff 유형 출력에 대한 Python 구현도 있습니다. –

답변

2

사용 설정 비교 방법?

set((remove_version(filepath) for filepath in iter_file(dic1))) == set((remove_version(filepath) for filepath in iter_file(dic2))) 
2

glob 모듈에는 목록 생성과 비교되는 반복자 기능이있어서 각 파일 항목을 반복 실행 한 다음 별도의 목록/사전으로 차용 할 수 있습니다.

그런 식으로 엄청난 파일 이름의 배치를 생성하고 그 파일을 선택하지 않습니다.

http://docs.python.org/py3k/library/glob.html#module-glob

관련 문제