Python#1을 사용하여 워크플로우 자동화: 파일 관리자

파이썬으로 워크플로우를 자동화하는 첫 번째 글입니다.
이 (초보자 우호형) 문장에서 당신은 자신의 Python을 만드는 방법을 배울 것입니다🐍 내 방식으로 자신의 업무 흐름을 위해 파일을 구성하는 스크립트.

내가 무슨 문제를 해결했습니까?🤔


제가 트위터에 파이썬을 많이 올렸어요.🐍 단편, 영상 제작, 대량의 이미지, 영상 등을 다운로드해야 하는 프로젝트!
나는 나의 다운로드를 조직할 시간이 없다📂 만약 내가 서류를 찾고 싶다면...

출처: Makeame.조직하다

So, I wrote a Python script to automatically organize my files in one go. ✨✨


스크립트 이전에😰


이것이 바로 나의 다운로드 폴더의 일반적인 모습이다...



네, 이것은 난잡하고 무질서한 혼란입니다💀

(마법) 뒤에✨) 시나리오😄🥰


이것이 바로 나의 다운로드 폴더의 현재 모습이다...



지금 제 방보다 깨끗해 보여요.🤩
보시다시피 모든 파일이 이미 구성되어 있습니다📂✨!!
멋있지!?😎😎

After writing the script, it's a lot easier for me to look for anything, cause every file is organized and belongs to their own 📂📂, which saves me a lot of time now.



자료 출처: cheezburger.일반 도메인 이름 형식

생각🔥


A Script which Moves files to their respective 📂✨


이 점을 실현하기 위해 나는 다음과 같은 작업을 했다(추상적인 보기).
  • 생성dictionary📔 파일 형식 (확장자) 을 포함하고 각각의📂 이름
  • 명령행 매개 변수를 통해 사용자로부터 가져오기(path💻
  • path 에서 파일을 찾고 메커니즘 function 을 만들어서 각각의 파일을 가져옵니다.📂 성함
  • 이동됨🖼, 📽, 🎵,🗒️ 등등📂📂📂

  • 자료 출처:http://www.brendanconnolly.net/keep-it-simple-theres-more-to-it/

    여기서부터 시작합시다.😰...



    ls 명령 출력 (스크립트를 실행하기 전에)

    여기까지😃✨✨



    ls 명령 출력(스크립트 실행 후)

    우리(마법)를 작성하는 절차✨) 시나리오


    단계 #1: 사전 만들기📔 확장자 (접두사) 와 디렉터리의📂


    이 부분이 제일 오래 걸려요.😁, 우리는 단지
    생성dictionary📔 (Hashmap), 그 중에서 키는 파일의 확장자입니다. 그에 대응하는 값은 우리가 이동할 디렉터리의 이름입니다.
    참고: Python에서 연결할 수 있습니다Dictionaries🐍 JavaScript의 Objects로 이동합니다.
    따라서 각 멀티미디어 파일에는 다음과 같은 확장자가 있습니다.
  • 이미지 파일에 확장자가 있습니다.jpeg.파푸아뉴기니.jpg.gif...
  • 비디오 파일에는 확장자가 있습니다.mp4.mov.mkv.webm...
  • 문서 파일에 확장자가 있습니다.서류문서.csv.pdf...
  • 등등
    따라서 우리는 구글에서 이미지, 동영상, 문서, 프로그램 파일, 그리고 우리가 필요로 하는 모든 종류의 파일의 확장자를 검색하여 그것들을 dictionary in{"extension": "directory"} 쌍에 조직하고 저장할 수 있다.
    dirs = {
        # Images
        "jpeg": "Images",
        "png": "Images",
        "jpg": "Images",
        "tiff": "Images",
        "gif": "Images",
    
        # Videos
        "mp4": "Videos",
        "mkv": "Videos",
        "mov": "Videos",
        "webm": "Videos",
        "flv": "Videos",
    
        # Music
        "mp3": "Music",
        "ogg": "Music",
        "wav": "Music",
        "flac": "Music",
    
        # Program Files
        "py": "Program Files",
        "js": "Program Files",
        "cpp": "Program Files",
        "html": "Program Files",
        "css": "Program Files",
        "c": "Program Files",
        "sh": "Program Files",
    
        # Documents
        "pdf": "Documents",
        "doc": "Documents",
        "docx": "Documents",
        "txt": "Documents",
        "ppt": "Documents",
        "ods": "Documents",
        "csv": "Documents"
    }
    

    2단계: 사용자로부터 가져오기 (경로)🧑🏻‍💻👩🏻‍💻 명령행 매개변수를 통해💻


    명령행 매개변수란 무엇입니까?


    명령줄 매개 변수가 무엇인지 모르는 사람들에게는 다음과 같은 간단한 버전이 있습니다.dirs 명령을 실행하여 디렉터리를 변경하고 다음 경로를 제공할 때...
    cd Documents/TOP_SECRET_STUFF
    

    또는


    ls Downloads
    
    이 경로를 명령행 매개변수라고 합니다.
    기본적으로 명령행 매개 변수는 실행 중인 프로그램이나 스크립트에 전달되는 값입니다.

    이제 우리 대본으로 돌아가📃👇🏻


    Python에는 cd라는 모듈이 있습니다. 이 모듈에는 함수sys가 있습니다. 이 함수는 스크립트를 실행할 때 지정한 명령행 매개 변수argv를 되돌려줍니다.
    다음은 그것의 작업 원리...
    이런python 스크립트를 실행할 때...
    python helloWorld.py
    
    list 지정된 모든 명령행 매개변수를 포함하는 목록을 반환합니다.
    위의 예에서 첫 번째 명령행 매개 변수는 argv 이며 스크립트 파일의 이름입니다.

    argv returns ['helloWorld.py'].


    만약 우리가 이런 명령행 파라미터를 제시한다면...


    python add.py 2 3
    

    argv will return ['add.py', '2', '3'].


    스크립트 파일의 사용자로부터 경로를 가져오는 데 사용합니다.


    from sys import argv
    
    # argv = ['our_script_file.py', 'path/to/dir']
    
    # Select second element (at index 1) as path
    path = argv[1] # 'path/to/dir'
    

    안에 작은 벌레가 하나 있다.


    사용자가 스크립트를 실행할 때 "helloWorld.py" 을 제공하지 않으면 색인 오류가 발생합니다. (두 번째 요소에 접근하려고 했지만 두 번째 요소에 접근할 수 없기 때문입니다.)

    하지만, 우리는 통과할 수 있다

    경로에서 경로에 액세스하기 전에 기준 추가


    이 간단한 조건은 명령행 매개 변수가 2 (스크립트 파일의 이름과 경로) 인지 확인하는 것입니다.

    그렇지 않으면 오류 메시지와 다음과 같은 사용법을 표시합니다...


    from pathlib import Path
    
    if len(argv) != 2:
        print("=" * 35)
        print("[ERROR] Invalid number of arguments were given")
        print(f"[Usage] python {Path(__file__).name} <dir_path>")
        print("=" * 35)
        exit(1) # terminate the execution of the script with code 1
    
    # Path to Organize
    PATH = argv[1]
    
    화목하다다 고쳤어!😁😁😁
    주:
  • argv 스크립트 파일(실행 중)을 포함하는 절대 경로
  • __file__Path(__file__)대상(다음 절은 깊이 있게 연구할 것)을 되돌려줍니다. 이 대상이 있으면 우리는 Path데이터 구성원과 이것name
  • 을 사용하여 스크립트 파일의 이름을 간단하게 인쇄할 수 있습니다.

    이제 명령줄에서 입력을 얻는 방법을 알게 되었습니다!!🔥🔥🔥


    3단계: 경로의 파일을 스캔하여 폴더로 이동


    파이썬에게 좋은 게 있어요.😎 Path(__file__).name라는 모듈로 처리pathlib에 사용됩니다.

    It's so cool that it can handle paths from different Operating Systems! 🤯


    서류를 조직하기 위해서 우리는 필요하다...

  • 🔍 경로에서 파일 찾기🛣
  • 파일당 확장자 확인🧐 (파일 유형)
  • 목적지 선택🗺️ 이 확장 기반
  • 이동✂️ 대상 디렉토리에 파일

  • 🔍 경로에서 파일 찾기🛣


    이를 위해, 우리는 Classes 클래스의 도움말 아래 경로 (명령행 매개 변수를 통해 제공) 를 paths 로 변환할 것입니다.
    이를 위해, 우리는 아래의 경로 클래스를 가져옵니다...
    from pathlib import Path
    
    그리고 Path Object (두 번째 요소) 에 저장된 첫 번째 인덱스의 경로를 사용하고 이 경로를 사용하여 Path 클래스를 호출합니다
    from pathlib import Path
    
    PATH = Path(argv[1]) # argv[1] = 'path/to/organize'
    
    이 디렉터리의 파일을 찾기 위해서, 우리는 argv 방법을 빌려 그것을 교체할 것이다.
    from pathlib import Path
    
    PATH = Path(argv[1]) # 'path/to/organize'
    
    for filename in PATH.iterdir():
        # Do Magic (Organize)
    
    
    이것은 우리가 어떤 경로에서 파일과 폴더를 교체하는 데 도움을 줄 것입니다!😃
    스크립트가 파일만 구성하기를 원하기 때문에 Path 파일인지 디렉터리인지 확인해야 합니다.우리는 iterdir 방법으로 이 점을 쉽게 할 수 있다.
    from pathlib import Path
    
    PATH = Path(argv[1]) # argv[1] = 'path/to/organize'
    
    for filename in PATH.iterdir():
        if filename.is_file(): # If filename is a file
            # Do Magic (Organize)
    
    

    각 파일의 확장자 확인🧐 (파일 유형)


    우리는 filename 대상을 사용하기 때문에 파일 확장자를 얻는 것은 매우 간단하다.
    가설 is_filePath 대상입니다.확장자를 얻기 위해 filename 대상의 Path 구성원에 저장됩니다.
    
    # filename = Path object with path value "AWESOME.jpeg"
    extension = filename.suffix # .jpeg
    
    왜냐하면 우리는'.'의 확장이 없기 때문이다접두사로 문자열 슬라이스를 사용하여 삭제합니다.
    
    # filename = Path object with path value "AWESOME.jpeg"
    extension = filename.suffix[1:] # 'jpeg'
    
    이제 우리는 확장자를 얻는 방법을 알고 있습니다!😄🎉

    목적지 선택🗺️ 이 확장 기반


    제목은 모든 것을 설명한다.
    목표를 선택하기 위해서, 우리는 이전에 만든 suffix (긴 키: 값 대 thingy) 을 사용하고 모든 파일에 정확한 목표 이름을 가져옵니다.
    
    # filename = Path object with path value "AWESOME.jpeg"
    extension = filename.suffix[1:] # 'jpeg'
    directory_name = dirs.get(extension) # 'Images'
    
    차갑다😎! 그런데 만약에 확장이 저희 Path 에 없으면...😐 그것은 돌아올 것이다dictionary. 우리는 원하지 않는다dictionary.그래요?
    따라서 None 에 없는 파일의 디렉터리 이름으로 기본값 None 을 추가합니다.
    
    # filename = Path object with path value "New_IMG.ppm"
    extension = filename.suffix[1:] # 'ppm'
    directory_name = dirs.get(extension, 'Miscellaneous') # 'Miscellaneous'
    

    저희 거의 끝났어요.


    우리는 이 코드를 한 번 또 한 번 사용해야 하기 때문에, 우리는 그것을 하나의 함수에 포장할 수 있다.
    입력한 각 파일의 디렉터리 이름으로 되돌아오기 때문에 이름을 "Miscellaneous" 로 지정합니다.일리가 있다.정당하다

    또한docstring을 조금만 추가해도 해가 되지 않습니다...


    
    def get_dir(filename):
        """
            This function takes filename and returns name of the
            parent directory of the respective filename
            Returns Miscellaneous if Parent is not found
        """
        ext = filename.suffix[1:]
        return dirs.get(ext, "Miscellaneous")
    

    이동✂️ 대상 디렉토리에 파일 보내기 (최종!😃)


    우리는 dictionaryget_dir 함수 (셸 실용 프로그램...?) 를 사용할 것이다모듈(예, 파이썬의 다른dope 모듈)은 파일을 한 곳에서 다른 곳으로 이동하는 데 사용됩니다.
    파일을 이동하는 것은 매우 간단합니다!여기에 예가 하나 있다.
    
    from shutil import move
    
    source_path = '/home/gagan/Downloads/Awesome.jpeg'
    destination_path = '/home/gagan/Downloads/Images'
    
    move(source_path, destination_path) # self explanatory
    
    이것은 Bash에서 이 명령을 실행하는 것과 유사합니다
    mv ~/Downloads/Awesome.jpeg ~/Downloads/Images
    

    자료 출처: memegenerator.그물move 대상에서 shutil 을 얻기 위해 path 함수를 사용합니다. 이 함수는 Path 대상이 아니라 str 대상에서 되돌아옵니다.
    우리는 그것을 사용해야 한다. 왜냐하면 path 함수는
    move(
      str(source_path),
      str(destination_path)
    )
    

    이동할 파일에 대한 대상 디렉토리 만들기


    앞에서 정의한 string 함수를 사용하여 각 파일에 대한 대상 디렉토리를 다음과 같이 만듭니다.
    destination = PATH / get_dir(filename)
    
    if not destination.exists():
        destination.mkdir()
    
    명령줄을 통해 제공된 경로를 사용하여 새 Path 대상을 만들고 move 를 사용하여 선택한 디렉터리 이름과 연결하고 get_dir 변수에 저장합니다.
    또한 존재하지 않는다면 우리는 그것을 생성해야 한다. 이것은 PathPATH / get_dir(filename) 방법을 통해 완성된 것이다.
    주:
  • "~"홈 디렉터리를 포함하는 경로(내 것은 destination
  • 파일을 이동하려면 절대 경로가 필요합니다. (절대 경로는 파일/디렉토리의 전체 경로를 의미합니다.)
  • 절대 경로를 얻기 위해 우리는 exists 대상의 mkdir 방법을 사용한다.
  • /home/gagan/ 파일을 포함하는 절대 소스 경로
  • 를 포함하는 객체absolute로 돌아갑니다.
  • Path(약간) 파일 이동도 지원합니다!그러나 우리는 슈틸을 사용했다. 왜냐하면 슈틸은 filename.absolute() 명령의 행동을 모방했고 업무 중에 아무런 문제가 없었기 때문이다.
  • Now, we know everything we need for implementing the (Magical ✨) Script! 😎🔥


    🔥🔥🔥🔥


    우리 모두 함께 놓자


    지금까지 우리는 이미 배웠다


    🔥🔥🔥🔥


    from pathlib import Path
    from sys import argv
    from shutil import move
    
    
    def get_dir(filename):
        """
            This function takes filename and returns name of the
            parent directory of the respective filename
            Returns Miscellaneous if Parent is not found
        """
        ext = filename.suffix[1:]
        return dirs.get(ext, "Miscellaneous")
    
    
    dirs = {
        # Images
        "jpeg": "Images",
        "png": "Images",
        "jpg": "Images",
        "tiff": "Images",
        "gif": "Images",
    
        # Videos
        "mp4": "Videos",
        "mkv": "Videos",
        "mov": "Videos",
        "webm": "Videos",
        "flv": "Videos",
    
        # Music
        "mp3": "Music",
        "ogg": "Music",
        "wav": "Music",
        "flac": "Music",
    
        # Program Files
        "py": "Program Files",
        "js": "Program Files",
        "cpp": "Program Files",
        "html": "Program Files",
        "css": "Program Files",
        "c": "Program Files",
        "sh": "Program Files",
    
        # Documents
        "pdf": "Documents",
        "doc": "Documents",
        "docx": "Documents",
        "txt": "Documents",
        "ppt": "Documents",
        "ods": "Documents",
        "csv": "Documents"
    }
    
    if len(argv) != 2:
        print("=" * 35)
        print("[ERROR] Invalid number of arguments were given")
        print(f"[Usage] python {Path(__file__).name} <dir_path>")
        print("=" * 35)
        exit(1)
    
    # Directory Path
    PATH = Path(argv[1])
    
    for filename in PATH.iterdir():
    
        path_to_file = filename.absolute()
    
        if path_to_file.is_file():
            destination = PATH / get_dir(filename)
    
            if not destination.exists():
                destination.mkdir()
    
            move(str(path_to_file), str(destination))
    

    마지막으로, 실행 (신기한) 스크립트🔥


    내 다운로드 폴더를 구성하기 위해서, 나는 지금 아래 명령을 간단하게 실행할 수 있다...
    python organize.py ~/Downloads
    

    Path를 사용하여 이 긴 명령 단축


    나는 어떤 디렉터리에서 스크립트를 실행하기 위해 pathlib 명령을 실행할 필요가 없도록 mv 을 만들었다.

    다음은 제가 지금 경로에서 파일을 구성하는 방법입니다.


    organize ~/Downloads
    

    너무 깨끗해!😁


    이게 별명을 만드는 방법이에요.👇🏻👇🏻👇🏻

    alias 파일에 다음 명령 붙여넣기


    alias organize="python /path/to/script_file.py $1"
    
    alias를 스크립트 파일을 저장하는 경로로 바꿉니다.스크립트 파일의 절대 경로인지 확인하십시오.
    주:python ~/projects/File-Organizer/organize.py는 스크립트 파일에 전달될 첫 번째 매개 변수입니다.

    터미널에서 활성화하려면 다음 명령을 실행하십시오


    source ~/.bashrc
    

    화목하다우리 끝났어!😎🎉🎉🎉🎉


    이거 너무 쉬워!정당하다


    Link to the script

    치즈버거.일반 도메인 이름 형식
    나는 너희들이 이 문장을 찾을 수 있기를 바란다.🤨) 유용했어
    만약 내가 무엇을 빠뜨렸거나 더 많이 보충하고 싶다면 언제든지 댓글에 언급해 주십시오.

    만약 당신들이 나를 지지하고 싶다면, 나에게 진지한 피드백을 주고, 나에게 어떻게 자신과 나의 문장을 개선하는지 알려 주세요.


    읽어주셔서 감사합니다. 활력을 유지하세요!✨

    좋은 웹페이지 즐겨찾기