Majoritatea locurilor de muncă au sarcini repetitive pe care le puteți automatiza, ceea ce vă eliberează o parte din timpul valoros. Acest lucru face ca automatizarea să devină o abilitate cheie de dobândit.
Un grup mic de ingineri calificați în domeniul automatizării și experți în domeniu poate fi capabil să automatizeze multe dintre cele mai plictisitoare sarcini ale întregii echipe.
În acest articol, vom explora elementele de bază ale automatizării fluxului de lucru folosind Python – un limbaj de programare puternic și ușor de învățat. Vom folosi Python pentru a scrie un script de automatizare ușor și util, care va curăța un folder dat și va pune fiecare fișier în dosarul său corespunzător.
Scopul nostru nu va fi să scriem cod perfect sau să creăm arhitecturi ideale la început.
De asemenea, nu vom construi nimic „ilegal”. În schimb, vom analiza cum să creați un script care curăță automat un anumit folder și toate fișierele acestuia.
Cuprins
-
Domenii de automatizare și de unde să începeți
- Automatizare simplă
- Automatizare API publică
- API Reverse Engineering
- Considerații etice ale automatizării
- Crearea unui script de curățare a directorului
- Un ghid complet pentru crearea de boturi și automatizarea muncii de zi cu zi
Domenii de automatizare și de unde să începeți
Să începem cu definirea ce fel de automatizări există.
Arta automatizării se aplică majorității sectoarelor. Pentru început, vă ajută cu sarcini precum extragerea adreselor de e-mail dintr-o grămadă de documente, astfel încât să puteți face o explozie de e-mail. Sau abordări mai complexe, cum ar fi optimizarea fluxurilor de lucru și a proceselor în interiorul marilor corporații.
Desigur, trecerea de la mici scripturi personale la o infrastructură mare de automatizare care înlocuiește oamenii reali implică un proces de învățare și îmbunătățire. Deci, să vedem de unde îți poți începe călătoria.
Automatizări simple
Automatizările simple permit un punct de intrare rapid și simplu. Acest lucru poate acoperi mici procese independente, cum ar fi curățarea proiectelor și restructurarea fișierelor din directoare sau părți ale unui flux de lucru, cum ar fi redimensionarea automată a fișierelor deja salvate.
Automatizări API publice
Automatizările API publice sunt cea mai comună formă de automatizare, deoarece putem accesa majoritatea funcționalităților folosind cereri HTTP către API-uri în zilele noastre. De exemplu, dacă doriți să automatizați udarea grădinii dvs. inteligente auto-făcute acasă.
Pentru a face acest lucru, doriți să verificați vremea din ziua curentă pentru a vedea dacă trebuie să apă sau dacă intră ploaie.
API Reverse Engineering
Automatizarea bazată pe ingineria inversă API este mai frecventă în roboții reali și în secțiunea „Imposter bot” din grafic în secțiunea „Considerații etice” de mai jos.
Prin ingineria inversă a unui API, înțelegem fluxul de aplicații al utilizatorilor. Un exemplu ar putea fi autentificarea într-un joc de browser online.
Înțelegând procesul de autentificare și autentificare, putem duplica acel comportament cu propriul nostru script. Apoi, putem crea propria noastră interfață pentru a lucra cu aplicația, chiar dacă acestea nu o furnizează singure.
Indiferent de abordarea pe care o vizați, luați întotdeauna în considerare dacă este legală sau nu.
Nu vrei să te bagi în probleme, nu-i așa? ?
Considerații etice
Un tip de pe GitHub m-a contactat odată și mi-a spus asta:
„Aprecierile și implicarea sunt moneda digitală și le devalorizați.”
Acest lucru a rămas cu mine și m-a făcut să pun la îndoială instrumentul pe care l-am construit exact în acest scop.
Faptul că aceste interacțiuni și implicarea pot fi automatizate și „falsificate” din ce în ce mai mult duce la un sistem de social media distorsionat și rupt.
Persoanele care produc conținut valoros și bun sunt invizibile pentru alți utilizatori și companii de publicitate dacă nu utilizează roboți și alte sisteme de implicare.
Un prieten de-al meu a venit cu următoarea asociere cu „Nine Circles of Hell” a lui Dante, unde la fiecare pas mai aproape de a deveni un influențator social devii din ce în ce mai puțin conștient de cât de rupt este de fapt acest întreg sistem.
Vreau să vă împărtășesc acest lucru aici, deoarece cred că este o reprezentare extrem de exactă a ceea ce am asistat în timp ce lucram activ cu Influenți cu InstaPy.
Nivelul 1: Limbo – Dacă nu botești deloc
Nivelul 2: Flirtul – Când îți place și urmărești manual cât mai mulți oameni poți pentru a-i determina să te urmărească înapoi / apreciază postările tale
Nivelul 3: Conspirație – când vă alăturați unui grup Telegram pentru a aprecia și a comenta 10 fotografii, astfel încât următoarelor 10 persoane să le placă și să comenteze fotografia dvs.
Nivelul 4: Infidelitate – Când utilizați un Asistent virtual ieftin pentru a aprecia și urmări în numele dvs.
Nivelul 5: Pofta – Când folosiți un bot pentru a da aprecieri și nu primiți înapoi niciun like în schimb (dar nu plătiți pentru el – de exemplu, o extensie Chrome)
Nivelul 6: Promiscuitate – Când folosiți un bot pentru a da 50+ aprecieri pentru a obține 50+ aprecieri, dar nu plătiți pentru acesta – de exemplu, o extensie Chrome
Nivelul 7: Avaritatea sau Aviditatea Extremă – Când utilizați un bot pentru a aprecia / urmări / comenta între 200-700 de fotografii, ignorând șansa de a fi interzis
Nivelul 8: Prostituția – Când plătiți un serviciu terță parte necunoscut pentru a vă angaja în aprecieri reciproce automatizate / urmăriți pentru dvs., dar aceștia folosesc contul dvs. pentru a aprecia / urma
Nivelul 9: Fraudă / erezie – Când cumpărați adepți și aprecieri și încercați să vă vindeți brandurilor ca influențator
Nivelul de îmbuteliere pe social media este atât de răspândit încât dacă nu botești, vei fi blocat la nivelul 1, Limbo, fără o creștere a adepților și un angajament redus față de colegii tăi.
În teoria economică, acest lucru este cunoscut sub numele de dilema prizonierului și jocul cu sumă zero. Dacă eu nu bot și tu bot, vei câștiga. Dacă nu botezi și eu botez, câștig. Dacă nimeni nu botează, toată lumea câștigă. Dar, deoarece nu există niciun stimulent pentru toată lumea să nu boteze, toată lumea botează, deci nimeni nu câștigă.
Fiți conștienți de acest lucru și nu uitați niciodată implicațiile pe care toate instrumentele le au asupra rețelelor sociale.

Vrem să evităm să ne ocupăm de implicații etice și să lucrăm în continuare la un proiect de automatizare aici. Acesta este motivul pentru care vom crea un script simplu de curățare a directorului care vă ajută să vă organizați folderele murdare.
Crearea unui script de curățare a directorului
Acum vrem să analizăm un script destul de simplu. Curăță automat un anumit director mutând acele fișiere în folderele corespunzătoare pe baza extensiei de fișier.
Deci, tot ce vrem să facem este următorul:

Configurarea Argument Parser
Deoarece lucrăm cu funcționalitatea sistemului de operare, cum ar fi mutarea fișierelor, trebuie să importăm fișierul os
bibliotecă. În plus, vrem să oferim utilizatorului un anumit control asupra folderului care este curățat. Vom folosi argparse
bibliotecă pentru asta.
import os
import argparse
După importarea celor două biblioteci, să configurăm mai întâi parserul de argumente. Asigurați-vă că dați o descriere și un text de ajutor fiecărui argument adăugat pentru a oferi ajutor valoros utilizatorului atunci când tastează --help
.
Argumentul nostru va fi numit --path
. Liniuțele duble din fața numelui indică bibliotecii că acesta este un argument opțional. În mod implicit, dorim să folosim directorul curent, așa că setați valoarea implicită să fie "."
.
parser = argparse.ArgumentParser(
description="Clean up directory and put files into according folders."
)
parser.add_argument(
"--path",
type=str,
default=".",
help="Directory path of the to be cleaned directory",
)
# parse the arguments given by the user and extract the path
args = parser.parse_args()
path = args.path
print(f"Cleaning up directory {path}")
Aceasta finalizează deja secțiunea de analiză a argumentelor – este destul de simplă și lizibilă, nu?
Să ne executăm scriptul și să verificăm erorile.
python directory_clean.py --path ./test
=> Cleaning up directory ./test
Odată executat, putem vedea numele directorului imprimat pe consolă, perfect.
Să folosim acum os
bibliotecă pentru a obține fișierele căii date.
Obținerea unei liste de fișiere din dosar
Prin utilizarea os.listdir(path)
și oferindu-i o cale validă, obținem o listă cu toate fișierele și folderele din interiorul acelui director.
După enumerarea tuturor elementelor din folder, vrem să facem diferența între fișiere și foldere, deoarece nu vrem să curățăm folderele, ci doar fișierele.
În acest caz, folosim o înțelegere a listei Python pentru a itera prin toate elementele și le punem în noile liste dacă îndeplinesc cerința dată de a fi un fișier sau un folder.
# get all files from given directory
dir_content = os.listdir(path)
# create a relative path from the path to the file and the document name
path_dir_content = [os.path.join(path, doc) for doc in dir_content]
# filter our directory content into a documents and folders list
docs = [doc for doc in path_dir_content if os.path.isfile(doc)]
folders = [folder for folder in path_dir_content if os.path.isdir(folder)]
# counter to keep track of amount of moved files
# and list of already created folders to avoid multiple creations
moved = 0
created_folders = []
print(f"Cleaning up {len(docs)} of {len(dir_content)} elements.")
Ca întotdeauna, să ne asigurăm că utilizatorii noștri primesc feedback. Așadar, adăugați o declarație de imprimare care să ofere utilizatorului o indicație despre câte fișiere vor fi mutate.
python directory_clean.py --path ./test
=> Cleaning up directory ./test
=> Cleaning up 60 of 60 elements.
După reexecutarea scriptului python, putem vedea acum că /test
folderul pe care l-am creat conține 60 de fișiere care vor fi mutate.
Crearea unui folder pentru fiecare extensie de fișier
Următorul și mai important pas acum este să creați folderul pentru fiecare dintre extensiile de fișiere. Vrem să facem acest lucru parcurgând toate fișierele noastre filtrate și dacă acestea au o extensie pentru care nu există deja un folder, creați unul.
os
biblioteca ne ajută cu funcționalități mai frumoase, cum ar fi împărțirea tipului de fișier și a căii unui document dat, extragând calea în sine și numele documentului.
# go through all files and move them into according folders
for doc in docs:
# separte name from file extension
full_doc_path, filetype = os.path.splitext(doc)
doc_path = os.path.dirname(full_doc_path)
doc_name = os.path.basename(full_doc_path)
print(filetype)
print(full_doc_path)
print(doc_path)
print(doc_name)
break
Declarația de pauză de la sfârșitul codului de mai sus se asigură că terminalul nostru nu primește spam dacă directorul nostru conține zeci de fișiere.
Odată ce am configurat acest lucru, să executăm scriptul pentru a vedea o ieșire similară cu aceasta:
python directory_clean.py --path ./test
=> ...
=> .pdf
=> ./test/test17
=> ./test
=> test17
Acum putem vedea că implementarea de mai sus împarte tipul de fișier și apoi extrage părțile din calea completă.
Deoarece avem tipul de fișier acum, putem verifica dacă există deja un folder cu numele acestui tip.
Înainte de a face acest lucru, vrem să ne asigurăm că omitem câteva fișiere. Dacă folosim directorul curent "."
ca cale, trebuie să evităm mutarea scriptului python în sine. Un simplu dacă starea se ocupă de asta.
În plus, nu vrem să ne mișcăm Fișiere ascunse, deci să includem și toate fișierele care încep cu un punct. .DS_Store
fișierul de pe macOS este un exemplu de fișier ascuns.
# skip this file when it is in the directory
if doc_name == "directory_clean" or doc_name.startswith('.'):
continue
# get the subfolder name and create folder if not exist
subfolder_path = os.path.join(path, filetype[1:].lower())
if subfolder_path not in folders:
# create the folder
Odată ce ne-am ocupat de scriptul Python și de fișierele ascunse, putem trece acum la crearea folderelor de pe sistem.
În plus față de verificarea noastră, dacă folderul era deja acolo când citim conținutul directorului, la început, avem nevoie de o modalitate de a urmări folderele pe care le-am creat deja. Acesta a fost motivul pentru care am declarat created_folders = []
listă. Acesta va servi ca memorie pentru a urmări numele folderelor.
Pentru a crea un folder nou, fișierul os
biblioteca oferă o metodă numită os.mkdir(folder_path)
care ia o cale și creează un folder cu numele dat acolo.
Această metodă poate genera o excepție, spunându-ne că folderul există deja. Deci, să ne asigurăm, de asemenea, să detectăm acea eroare.
if subfolder_path not in folders and subfolder_path not in created_folders:
try:
os.mkdir(subfolder_path)
created_folders.append(subfolder_path)
print(f"Folder {subfolder_path} created.")
except FileExistsError as err:
print(f"Folder already exists at {subfolder_path}... {err}")
După configurarea creației folderului, haideți să reexecutăm scriptul.
python directory_clean.py --path ./test
=> ...
=> Folder ./test/pdf created.
La prima rundă de execuție, putem vedea o listă de jurnale care ne spun că au fost create folderele cu tipurile date de extensii de fișiere.
Mutarea fișierului în subfolderul din dreapta
Ultimul pas acum este să mutați de fapt fișierele în folderele părinte noi.
Un lucru important de înțeles atunci când lucrați cu operații de operare este că uneori operațiile nu pot fi anulate. Acesta este, de exemplu, cazul ștergerii. Deci, este logic să ne deconectăm mai întâi de comportamentul pe care l-ar avea scriptul nostru dacă îl executăm.
Acesta este motivul pentru care os.rename(...)
metoda a fost comentată aici.
# get the new folder path and move the file
new_doc_path = os.path.join(subfolder_path, doc_name) + filetype
# os.rename(doc, new_doc_path)
moved += 1
print(f"Moved file {doc} to {new_doc_path}")
După ce ne-am executat scriptul și am văzut înregistrarea corectă, acum putem elimina hash-ul comentariului înainte de al nostru os.rename()
metoda și dați o ultimă încercare.
# get the new folder path and move the file
new_doc_path = os.path.join(subfolder_path, doc_name) + filetype
os.rename(doc, new_doc_path)
moved += 1
print(f"Moved file {doc} to {new_doc_path}")
print(f"Renamed {moved} of {len(docs)} files.")
python directory_clean.py --path ./test
=> ...
=> Moved file ./test/test17.pdf to ./test/pdf/test17.pdf
=> ...
=> Renamed 60 of 60 files.
Această execuție finală va muta acum toate fișierele în folderele corespunzătoare, iar directorul nostru va fi curățat frumos fără a fi nevoie de acțiuni manuale.
În pasul următor, am putea folosi acum scriptul pe care l-am creat mai sus și, de exemplu, să-l programăm să se execute în fiecare luni pentru a curăța folderul Descărcări pentru mai multă structură.
Este exact ceea ce creăm ca o urmărire în interiorul cursul nostru Udemy pentru crearea botului și automatizarea fluxului de lucru.
Un ghid complet pentru crearea de boturi și automatizarea muncii de zi cu zi
Felix și cu mine am construit un curs video online pentru a vă învăța cum să vă creați proprii roboți pe baza a ceea ce am învățat să construim InstaPy si a lui Travian-Bot. De fapt, el a fost chiar forțat să dea jos, deoarece era prea eficient.
Alătură-te chiar în și începe să înveți.
Dacă aveți întrebări sau feedback, nu ezitați să ne contactați Stare de nervozitate sau direct în secțiunea de discuții a cursului ?