나는 작은 문제를 해결하기 위해 스크립트를 작성하는 것을 좋아합니다
어제 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
Reference
이 문제에 관하여(나는 작은 문제를 해결하기 위해 스크립트를 작성하는 것을 좋아합니다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/hamatti/i-love-writing-scripts-to-solve-small-problems-462m텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)