특수 Python 실습 복사

선택하여 복사 연습에서는 Python 유틸리티 섹션의 파일 시스템 및 외부 명령어 자료를 사용합니다. 이 연습은 google-python-exercises의 'copyspecial' 디렉터리에 있습니다. 아직 다운로드하지 않았다면 google-python-exercises.zip을 다운로드하고, 자세한 내용은 설정을 참고하세요. copyspecial.py에 코드를 추가합니다.

copyspecial.py 프로그램은 하나 이상의 디렉터리를 인수로 사용합니다. '특수' 파일은 이름에 __w__ 패턴이 포함되어 있으며 여기서 w는 하나 이상의 단어 문자입니다. 제공된 main()에는 명령줄 인수를 파싱하는 코드가 포함되어 있지만 나머지는 개발자가 결정합니다. 아래 기능을 구현하는 함수를 작성하고 함수를 호출하도록 main()을 수정합니다.

솔루션을 위한 추천 함수(아래 세부정보 참고):

  • get_special_paths(dir) -- 지정된 디렉터리에 있는 특수 파일의 절대 경로 목록을 반환합니다.
  • copy_to(paths, dir)를 사용하여 파일 이름을 지정된 디렉터리에 복사합니다.
  • zip_to(paths, zippath)와 함께 지정된 zip 파일로 압축합니다.

파트 A (파일 경로 조작)

모든 디렉터리에 있는 특수 파일의 절대 경로 목록을 수집합니다. 가장 간단한 경우 해당 목록을 출력하면 됩니다. 여기서는 명령어 뒤의 '.'가 현재 디렉터리를 나타내는 단일 인수입니다. 절대 경로를 한 줄에 하나씩 출력합니다.

$ ./copyspecial.py .
/Users/nparlante/pycourse/day2/xyz__hello__.txt
/Users/nparlante/pycourse/day2/zz__something__.jpg

디렉터리 전체에서 이름이 반복되지 않는다고 가정합니다 (선택사항: 가정하고 위반되는 경우 오류 확인).

파트 B (파일 복사)

명령줄 시작 부분에 '--todir dir' 옵션이 있으면 아무것도 출력하지 말고 대신 파일을 지정된 디렉터리로 복사하여 필요한 경우 만듭니다. 파일 복사에 Python 모듈 'shutil'을 사용합니다.

$ ./copyspecial.py --todir /tmp/fooby .
$ ls /tmp/fooby
xyz__hello__.txt        zz__something__.jpg

파트 C (외부 프로그램 호출)

명령줄 시작 부분에 '--tozip zipfile' 옵션이 있으면 'zip -j zipfile <list all the files>' 명령어를 실행합니다. 그러면 파일이 포함된 ZIP 파일이 만들어집니다. 재미와 확신을 위해 먼저 실행할 명령줄도 출력하세요 (강의에 나와 있음). (Windows 참고: Windows에는 기본적으로 표준 .zip 보관 파일을 생성하는 프로그램이 포함되어 있지 않지만 www.info-zip.org에서 무료로 제공되는 개방형 ZIP 프로그램을 다운로드할 수 있습니다.) Linux 사용자의 경우 zip이 설치되어 있지 않으면 sudo apt install zip를 호출하여 설치할 수 있습니다 .

$ ./copyspecial.py --tozip tmp.zip .

Command I'm going to do:zip -j tmp.zip /Users/nparlante/pycourse/day2/xyz__hello__.txt /Users/nparlante/pycourse/day2/zz__something__.jpg

하위 프로세스가 오류 코드와 함께 종료되면 오류 코드와 함께 종료되고 명령어 결과를 출력합니다. 존재하지 않는 디렉터리에 ZIP 파일을 작성하여 이를 테스트합니다.

$ ./copyspecial.py --tozip /no/way.zip .

Command I'm going to do:zip -j /no/way.zip /Users/nparlante/pycourse/day2/xyz__hello__.txt /Users/nparlante/pycourse/day2/zz__something__.jpg

zip I/O error: No such file or directory zip error: Could not create output file (/no/way.zip)