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
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_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)
방법을 통해 완성된 것이다.주:
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
치즈버거.일반 도메인 이름 형식
나는 너희들이 이 문장을 찾을 수 있기를 바란다.🤨) 유용했어
만약 내가 무엇을 빠뜨렸거나 더 많이 보충하고 싶다면 언제든지 댓글에 언급해 주십시오.
만약 당신들이 나를 지지하고 싶다면, 나에게 진지한 피드백을 주고, 나에게 어떻게 자신과 나의 문장을 개선하는지 알려 주세요.
읽어주셔서 감사합니다. 활력을 유지하세요!✨
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.)