"filecmp" --- 파일과 디렉터리 비교
**********************************

**소스 코드:** Lib/filecmp.py

======================================================================

"filecmp" 모듈은 다양한 선택적 시간/정확도 절충을 통해 파일과 디렉터리
를 비교하는 함수를 정의합니다. 파일 비교에 대해서는, "difflib" 모듈을
참조하십시오.

"filecmp" 모듈은 다음 함수를 정의합니다:

filecmp.cmp(f1, f2, shallow=True)

   *f1*와 *f2*로 이름이 지정된 파일을 비교하여, 같아 보이면 "True"를
   반환하고, 그렇지 않으면 "False"를 반환합니다.

   If *shallow* is true and the "os.stat()" signatures (file type,
   size, and modification time) of both files are identical, the files
   are taken to be equal.

   Otherwise, the files are treated as different if their sizes or
   contents differ.

   이 함수는 외부 프로그램을 호출하지 않으므로 이식성과 효율성을 제공
   합니다.

   이 함수는 과거 비교와 결과에 대해 캐시를 사용합니다. 파일에 대한
   "os.stat()" 정보가 변경되면 캐시 항목이 무효화 됩니다. 전체 캐시는
   "clear_cache()"를 사용하여 지울 수 있습니다.

filecmp.cmpfiles(dir1, dir2, common, shallow=True)

   두 디렉터리 *dir1* 과 *dir2*에 있는 이름이 *common*으로 지정된 파일
   들을 비교합니다.

   파일 이름의 세 가지 리스트를 반환합니다: *match*, *mismatch*,
   *errors*. *match*는 일치하는 파일 리스트를 포함하고, *mismatch*는
   일치하지 않는 파일의 이름을 포함하며, *errors*는 비교할 수 없는 파
   일의 이름을 나열합니다. 파일이 디렉터리 중 하나에 없거나, 사용자가
   읽을 수 있는 권한이 없거나, 다른 이유로 인해 비교를 수행할 수 없으
   면 파일은 *errors*에 나열됩니다.

   *shallow* 매개 변수는 "filecmp.cmp()"와 같은 의미와 기본값을 가집니
   다.

   예를 들어, "cmpfiles('a', 'b', ['c', 'd/e'])"는 "a/c"와 "b/c",
   "a/d/e"와 "b/d/e"를 비교합니다. "'c'" 와 "'d/e'"는 각각 반환된 세
   개의 리스트 중 하나에 포함됩니다.

filecmp.clear_cache()

   filecmp 캐시를 지웁니다. 파일이 수정된 후 너무 빨리 비교되어 하부
   파일 시스템의 mtime 해상도 내에 있을 때 유용합니다.

   버전 3.4에 추가.


"dircmp" 클래스
===============

class filecmp.dircmp(a, b, ignore=None, hide=None)

   *a*와 *b* 디렉터리를 비교하기 위한, 새로운 디렉터리 비교 객체를 만
   듭니다. *ignore*는 무시할 이름 리스트며, 기본값은
   "filecmp.DEFAULT_IGNORES"입니다. *hide*는 숨길 이름 리스트며 기본값
   은 "[os.curdir, os.pardir]"입니다.

   "dircmp" 클래스는 "filecmp.cmp()"에서 설명한 대로 *얕은(shallow)*
   비교를 수행하여 파일을 비교합니다.

   "dircmp" 클래스는 다음 메서드를 제공합니다:

   report()

      *a*와 *b* 사이의 비교를 ("sys.stdout"로) 인쇄합니다.

   report_partial_closure()

      *a*와 *b* 및 공통 직접 하위 디렉터리 사이의 비교를 인쇄합니다.

   report_full_closure()

      *a*와 *b* 및 공통 하위 디렉터리 (재귀적으로) 사이의 비교를 인쇄
      합니다.

   "dircmp" 클래스는 비교되는 디렉터리 트리에 대한 다양한 정보 비트를
   얻는 데 사용될 수 있는 여러 가지 흥미로운 어트리뷰트를 제공합니다.

   "__getattr__()" 훅을 통해, 모든 어트리뷰트가 느긋하게(lazily) 계산
   되므로, 계산하기가 가벼운 어트리뷰트만 사용하면 속도가 저하되지 않
   습니다.

   left

      디렉터리 *a*.

   right

      디렉터리 *b*.

   left_list

      *hide* 와 *ignore*로 필터링 된, *a*의 파일과 하위 디렉터리.

   right_list

      *hide* 와 *ignore*로 필터링 된, *b*의 파일과 하위 디렉터리.

   common

      *a* 와 *b*의 공통 파일과 하위 디렉터리.

   left_only

      *a*에만 있는 파일과 하위 디렉터리.

   right_only

      *b*에만 있는 파일과 하위 디렉터리.

   common_dirs

      *a* 및 *b*의 공통 하위 디렉터리.

   common_files

      *a* 와 *b*의 공통 파일.

   common_funny

      *a*와 *b*의 공통 이름으로, 디렉터리 간에 유형이 다르거나,
      "os.stat()"가 에러를 보고하는 이름.

   same_files

      *a* 와 *b*에 모두 있고, 클래스의 파일 비교 연산자를 사용할 때 같
      은 파일.

   diff_files

      *a* 및 *b*에 모두 있고, 클래스의 파일 비교 연산자를 사용할 때 내
      용이 다른 파일.

   funny_files

      *a* 및 *b*에 모두 있지만, 비교할 수 없는 파일.

   subdirs

      "common_dirs"의 이름을 "dircmp" 객체로 매핑하는 딕셔너리.

filecmp.DEFAULT_IGNORES

   버전 3.4에 추가.

   "dircmp"에 의해 기본적으로 무시되는 디렉터리 리스트.

다음은 이름이 같지만, 내용이 다른 파일을 표시하기 위해, "subdirs" 어트
리뷰트로 두 개의 디렉터리를 재귀적으로 검색하는 간단한 예제입니다:

   >>> from filecmp import dircmp
   >>> def print_diff_files(dcmp):
   ...     for name in dcmp.diff_files:
   ...         print("diff_file %s found in %s and %s" % (name, dcmp.left,
   ...               dcmp.right))
   ...     for sub_dcmp in dcmp.subdirs.values():
   ...         print_diff_files(sub_dcmp)
   ...
   >>> dcmp = dircmp('dir1', 'dir2') 
   >>> print_diff_files(dcmp) 
