특수 복사 연습에서는 Python 유틸리티 섹션의 파일 시스템 및 외부 명령어 자료를 사용합니다. 이 연습은 'copySpecial'에서 google-python-exercises의 디렉토리로 이동합니다 (아직 다운로드하지 않은 경우 google-python-exercises.zip을 다운로드, 자세한 내용은 설정 참고). copySpecial.py에 코드를 추가합니다.
copySpecial.py 프로그램은 하나 이상의 디렉터리를 인수로 사용합니다. '특별'라는 단어를 파일은 이름에 어딘가에 __w__ 패턴이 포함된 파일이며, 여기서 w는 하나 이상의 단어 문자입니다. 제공된 main()에는 명령줄 인수를 파싱하는 코드가 포함되어 있지만 나머지는 개발자가 결정합니다. 아래 기능을 구현하는 함수를 작성하고 함수를 호출하도록 main()을 수정합니다.
솔루션에 대한 추천 함수(세부정보는 아래 참고):
- get_Special_paths(dir) -- 지정된 디렉터리에 있는 특수 파일의 절대 경로 목록을 반환합니다.
- copy_to(paths, dir)에 지정된 경로 목록을 통해 해당 파일을 지정된 디렉터리에 복사합니다.
- zip_to(paths, zippath) - 경로 목록이 주어지면 해당 파일을 주어진 zipfile로 압축
파트 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)