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 📂✨
이 점을 실현하기 위해 나는 다음과 같은 작업을 했다(추상적인 보기).
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로 이동합니다.
따라서 각 멀티미디어 파일에는 다음과 같은 확장자가 있습니다.
따라서 우리는 구글에서 이미지, 동영상, 문서, 프로그램 파일, 그리고 우리가 필요로 하는 모든 종류의 파일의 확장자를 검색하여 그것들을
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
argvwill 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_file 은 Path 대상입니다.확장자를 얻기 위해 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")
이동✂️ 대상 디렉토리에 파일 보내기 (최종!😃)
우리는
dictionary 의 get_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 변수에 저장합니다.또한 존재하지 않는다면 우리는 그것을 생성해야 한다. 이것은
Path 및 PATH / get_dir(filename) 방법을 통해 완성된 것이다.주:
destinationexists 대상의 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
치즈버거.일반 도메인 이름 형식
나는 너희들이 이 문장을 찾을 수 있기를 바란다.🤨) 유용했어
만약 내가 무엇을 빠뜨렸거나 더 많이 보충하고 싶다면 언제든지 댓글에 언급해 주십시오.
만약 당신들이 나를 지지하고 싶다면, 나에게 진지한 피드백을 주고, 나에게 어떻게 자신과 나의 문장을 개선하는지 알려 주세요.
읽어주셔서 감사합니다. 활력을 유지하세요!✨
Reference
이 문제에 관하여(Python#1을 사용하여 워크플로우 자동화: 파일 관리자), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/gagangulyani/automating-my-workflow-with-python-1-file-organizer-40po
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
python organize.py ~/Downloads
organize ~/Downloads
alias organize="python /path/to/script_file.py $1"
source ~/.bashrc
이거 너무 쉬워!정당하다
Link to the script
치즈버거.일반 도메인 이름 형식
나는 너희들이 이 문장을 찾을 수 있기를 바란다.🤨) 유용했어
만약 내가 무엇을 빠뜨렸거나 더 많이 보충하고 싶다면 언제든지 댓글에 언급해 주십시오.
만약 당신들이 나를 지지하고 싶다면, 나에게 진지한 피드백을 주고, 나에게 어떻게 자신과 나의 문장을 개선하는지 알려 주세요.
읽어주셔서 감사합니다. 활력을 유지하세요!✨
Reference
이 문제에 관하여(Python#1을 사용하여 워크플로우 자동화: 파일 관리자), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/gagangulyani/automating-my-workflow-with-python-1-file-organizer-40po텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)