나는 작은 문제를 해결하기 위해 스크립트를 작성하는 것을 좋아합니다

7108 단어 pythonscriptingbash
내가 프로그래밍을 아주 좋아하는 이유 중 하나는 그렇지 않으면 많은 수동 작업이 필요한 작고 성가신 것들을 자동화할 수 있기 때문입니다.

어제 zip 파일 내부에 다음 디렉토리 구조로 제공되는 파일 세트를 다운로드했습니다.

- Main Folder
  - Theme A (1)
    - FileA.pdf
    - FileA.txt
    - FileA.jpg
  - Theme B (2)
    - FileB.pdf
    - FileB.txt
    - FileB.jpg
  - Theme C (3)
    ...


내 사용 사례의 경우 pdf 파일에만 관심이 있었고 폴더의 괄호 안에 작성된 파일의 순서를 기록하고 싶었습니다. 수동으로 모두 Finder의 새 폴더로 이동할 수 있었지만 수십 개의 폴더가 있었기 때문에 편집기를 열고 Python을 작성하기 시작했습니다.

import os
import re
import shutil

NUMBER_PATTERN = re.compile(r'\((\d+)\)')

for directory, _, files in os.walk('.'):
    if directory == './Output':
        continue
    for filename in files:
        if not filename.endswith('.pdf'):
            continue

        episode_number = NUMBER_PATTERN.findall(directory)[0]
        path = os.path.join(directory, filename)

        new_filename = f'{episode_number:0>2} - {filename}'
        new_path = os.path.join('Output', new_filename)

        print(f'Copying {path} to {new_path}')
        shutil.copyfile(path, new_path)


매우 구체적인 이름 지정 및 파일 구조와 Output 폴더의 존재에 의존하는 단일 실행 스크립트입니다. 따라서 문제가 발생하면 고장납니다.

즉, 유지 관리가 용이하지 않으며 아마도 내가 작성할 수 있는 가장 좋은 파이썬 코드도 아닐 것입니다. 그러나 이것은 매우 특정한 상황에서 한 번 실행되는 스크립트이기 때문에 수동으로 오류 상황에서 복구할 수 있습니다.

그리고 그것이 그것의 아름다움입니다. 좋은 코드일 필요는 없으며 한 번만 작동하면 됩니다. 그것은 귀찮은 수동 복사 및 파일 이름 바꾸기를 많이 저장합니다.

프로덕션 환경에서 훌륭하고 유지 관리 가능하며 오류 방지 코드를 작성하는 것과는 대조적으로 이러한 스크립트를 사용하면 일부 코드를 함께 긁어 모으는 것만으로도 작은 성과를 얻을 수 있습니다.

이 아름다운 bash 스크립트를 강조하고 싶습니다.
만들어진 :

find . -iname "*.pdf" | while read F; do FILE=$(basename "$F"); NR=$(printf "%02d" "$(echo "$F" | sed "s/.*(\(.*\)).*/\1/")"); cp -v "$F" "./Output/$NR - $FILE"; done


편집2
또한 생선 껍질의 예를 제공했습니다.

for f in (find . -iname "*.pdf")
    set file (basename $f)
    set number (string match -r "\((.*)\)" $f)[2]
    set number (printf "%02d" $number)
    cp -v $f "./Output/$number - $file"
end

좋은 웹페이지 즐겨찾기