Kaip sukurti robotą ir automatizuoti kasdienį darbą

Daugelyje darbų yra pasikartojančių užduočių, kurias galite automatizuoti, o tai atlaisvina dalį jūsų brangaus laiko. Tai daro automatizavimą pagrindiniu įgūdžiu.

Nedidelė kvalifikuotų automatikos inžinierių ir domenų ekspertų grupė gali sugebėti automatizuoti daugelį varginančių užduočių visose komandose.

Šiame straipsnyje mes išnagrinėsime darbo eigos automatizavimo naudojant „Python“ pagrindus - galingą ir lengvai išmokstamą programavimo kalbą. Mes naudosime „Python“, norėdami parašyti lengvą ir naudingą mažą automatizavimo scenarijų, kuris išvalys tam tikrą aplanką ir kiekvieną failą įdės į atitinkamą aplanką.

Iš pradžių mūsų tikslas nebus parašyti tobulą kodą ar sukurti idealias architektūras.

Mes taip pat nestatysime nieko „nelegalaus“. Vietoj to mes pažvelgsime, kaip sukurti scenarijų, kuris automatiškai išvalys nurodytą aplanką ir visus jo failus.

Turinys

  1. Automatikos sritys ir nuo ko pradėti
    • Paprasta automatika
    • Viešoji API automatika
    • API atvirkštinė inžinerija
  2. Etikos automatikos aspektai
  3. Katalogo valymo scenarijaus kūrimas
  4. Išsamus žiniatinklio kūrimo ir kasdienio darbo automatizavimo vadovas

Automatikos sritys ir nuo ko pradėti

Pradėkime nuo apibrėžimo, kokios automatikos yra.

Automatikos menas taikomas daugumai sektorių. Pradedantiesiems tai padeda atlikti užduotis, pvz., Išgauti el. Pašto adresus iš daugybės dokumentų, kad galėtumėte atlikti el. Pašto sprogimą. Arba sudėtingesni metodai, pavyzdžiui, darbo srautų ir procesų optimizavimas didelėse korporacijose.

Žinoma, pereinant nuo mažų asmeninių scenarijų prie didelės automatikos infrastruktūros, pakeičiančios tikrus žmones, reikia mokytis ir tobulėti. Taigi pažiūrėkime, kur galite pradėti savo kelionę.

Paprasta automatika

Paprasta automatika leidžia greitai ir tiesiai įeiti. Tai gali apimti nedidelius nepriklausomus procesus, tokius kaip projektų valymas ir failų pertvarkymas katalogų viduje, arba darbo eigos dalys, pvz., Automatiškai pakeičiant jau išsaugotų failų dydį.

Viešoji API automatika

Viešosios API automatikos yra labiausiai paplitusi automatizavimo forma, nes mes galime pasiekti daugumą funkcijų naudodami HTTP užklausas į API. Pavyzdžiui, jei norite automatizuoti savo pačių pagaminto išmaniojo sodo laistymą namuose.

Norėdami tai padaryti, norite patikrinti dabartinės dienos orus, kad sužinotumėte, ar reikia laistyti, ar lietaus.

API atvirkštinė inžinerija

API atvirkštine inžinerija paremta automatika yra labiau paplitusi tikruose robotuose ir žemiau esančiame skyriuje „Etiniai aspektai“ pateiktos diagramos skiltyje „Bot Imposter“.

Atlikdami atvirkštinę API sąsają, mes suprantame vartotojų srautus. Vienas pavyzdys galėtų būti prisijungimas prie internetinės naršyklės žaidimo.

Suprasdami prisijungimo ir autentifikavimo procesą, galime tą elgesį nukopijuoti naudodami savo scenarijų. Tada mes galime sukurti savo sąsają, kad galėtume dirbti su programa, nors jie patys jos nepateikia.

Nesvarbu, kokio požiūrio siekiate, visada apsvarstykite, ar jis teisėtas, ar ne.

Juk nenorite patekti į bėdą? ?

Etikos aspektai

Kažkas „GitHub“ vaikinas susisiekė su manimi ir man pasakė:

„Patinka ir įsitraukimas yra skaitmeninė valiuta, ir jūs juos nuvertinate.“

Tai man įstrigo ir privertė suabejoti įrankiu, kurį sukūriau būtent tuo tikslu.

Tai, kad šias sąveikas ir įsitraukimą galima vis labiau automatizuoti ir „suklastoti“, sukelia iškreiptą ir sugadintą socialinės žiniasklaidos sistemą.

Žmonės, kurie kuria vertingą ir gerą turinį, yra nematomi kitiems vartotojams ir reklamos įmonėms, jei jie nenaudoja robotų ir kitų įtraukimo sistemų.

Mano draugas užmezgė tokią asociaciją su Dante'o „Devyni pragaro ratai“, kur kiekvienu žingsniu arčiau tapdamas socialiniu įtakotoju vis mažiau žinai, kokia iš tikrųjų yra visa ši sistema.

Noriu pasidalinti tuo su jumis čia, nes manau, kad tai yra ypač tikslus to, ką mačiau, aktyviai dirbdamas su „Influencers“ su „InstaPy“.

1 lygis: „Limbo“ - jei jūs visiškai nesijaudinate

2 lygis: flirtas - kai rankiniu būdu patinki ir seki kuo daugiau žmonių, kad jie tave stebėtų / patiktų tavo įrašams

3 lygis: Sąmokslas - kai prisijungiate prie „Telegram“ grupės, norėdami patikti ir komentuoti 10 nuotraukų, todėl kiti 10 žmonių patiks ir pakomentuos jūsų nuotrauką

4 lygis: neištikimybė - kai naudojatės pigiu virtualiuoju padėjėju, jei norite patikti ir sekti jūsų vardu

5 lygis: geismas - kai naudojate robotą norėdami pateikti teigiamą įvertinimą ir negavote atgal jokių teigiamų įvertinimų (bet už tai nemokate, pavyzdžiui, „Chrome“ plėtinys)

6 lygis: Akivaizdumas - kai naudojate robotą norėdami suteikti daugiau nei 50 mėgėjų, kad gautumėte daugiau nei 50 teigiamų įvertinimų, bet jūs už tai nemokate, pavyzdžiui, „Chrome“ plėtinys

7 lygis: vargas ar ypatingas godumas - kai naudodamas robotą mėgsti / seki / komentuok 200–700 nuotraukų, nepaisydamas galimybės uždrausti

8 lygis: prostitucija - kai mokate nežinomą trečiosios šalies paslaugą, kad užsiimtumėte automatizuotais abipusiais teigiamais paspaudimais / stebėjimais už jus, tačiau jie naudojasi jūsų paskyra norėdami patikti / atsekti

9 lygis: sukčiavimas / erezija - kai perkate sekėjus ir patinka ir bandote parduoti save prekės ženklams kaip įtaką darantį asmenį

Išpilstymo į socialinę žiniasklaidą lygis yra toks paplitęs, kad jei nenusileisite robotui, būsite įstrigęs 1-ajame lygyje, „Limbo“ , be sekėjų augimo ir mažo įsitraukimo, palyginti su bendraamžiais.

Ekonomikos teorijoje tai žinoma kaip kalinio dilema ir nulinės sumos žaidimas . Jei aš ne bot, o tu bot, tu laimi. Jei jūs ne bot, o aš bot, aš laimiu. Jei niekas nedirba, visi laimi. Bet kadangi nėra skatinimo visiems botažuotis, visi robotuoja, todėl niekas nelaimi.

Žinokite apie tai ir niekada nepamirškite viso šio įrankio reikšmės socialinėje žiniasklaidoje.

Mes norime vengti etinių pasekmių ir vis tiek čia dirbti su automatikos projektu. Štai kodėl sukursime paprastą katalogų valymo scenarijų, kuris padės jums tvarkyti netvarkingus aplankus.

Katalogo valymo scenarijaus kūrimas

Dabar norime pažvelgti į gana paprastą scenarijų. Jis automatiškai išvalo nurodytą katalogą, perkeldamas tuos failus į aplankus, pagrįstus failo plėtiniu.

Taigi viskas, ką norime padaryti, yra tai:

Argumentų analizatoriaus nustatymas

Kadangi dirbame su operacinės sistemos funkcijomis, pvz., Failų perkėlimu, turime importuoti osbiblioteką. Be to, mes norime suteikti vartotojui tam tikrą kontrolę, kuris aplankas yra išvalytas. Tam naudosimės argparsebiblioteka.

import os import argparse

Importavę dvi bibliotekas, pirmiausia nustatykime argumentų analizatorių. Kiekvienam pridėtam argumentui būtinai pateikite aprašą ir pagalbos tekstą, kad vartotojui būtų suteikta vertinga pagalba, kai jis veda tekstą --help.

Mūsų argumentas bus įvardytas --path. Dvigubi brūkšneliai prieš pavadinimą pasakoja bibliotekai, kad tai yra neprivalomas argumentas. Pagal numatytuosius nustatymus norime naudoti dabartinį katalogą, todėl nustatykite numatytąją reikšmę ".".

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}")

Tai jau baigia argumentų analizavimo skyrių - jis gana paprastas ir įskaitomas, tiesa?

Vykdykime scenarijų ir patikrinkime, ar nėra klaidų.

python directory_clean.py --path ./test => Cleaning up directory ./test

Vykdę, galime pamatyti, kad katalogo pavadinimas yra atspausdintas į konsolę.

Dabar naudokimės osbiblioteka, kad gautume nurodyto kelio failus.

Failų sąrašo iš aplanko gavimas

Naudodami os.listdir(path)metodą ir pateikdami jam tinkamą kelią, gausime visų failų ir aplankų, esančių tame kataloge, sąrašą.

Išvardinę visus aplanko elementus, norime atskirti failus ir aplankus, nes nenorime išvalyti aplankų, tik failus.

Šiuo atveju mes naudojame „Python“ sąrašo supratimą, norėdami pakartoti visus elementus ir įtraukti juos į naujus sąrašus, jei jie atitinka nurodytą failo ar aplanko reikalavimą.

# 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.")

As always, let's make sure that our users get feedback. So add a print statement that gives the user an indication about how many files will be moved.

python directory_clean.py --path ./test => Cleaning up directory ./test => Cleaning up 60 of 60 elements.

After re-executing the python script, we can now see that the /test folder I created contains 60 files that will be moved.

Creating a folder for every file extension

The next and more important step now is to create the folder for each of the file extensions. We want to do this by going through all of our filtered files and if they have an extension for which there is no folder already, create one.

The os library helps us with more nice functionality like the splitting of the filetype and path of a given document, extracting the path itself and name of the document.  

# 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

The break statement at the end of the code above makes sure that our terminal does not get spammed if our directory contains dozens of files.

Once we've set this up, let's execute our script to see an output similar to this:

python directory_clean.py --path ./test => ... => .pdf => ./test/test17 => ./test => test17

We can now see that the implementation above splits off the filetype and then extracts the parts from the full path.

Since we have the filetype now, we can check if a folder with the name of this type already exists.

Before we do that, we want to make sure to skip a few files. If we use the current directory "." as the path, we need to avoid moving the python script itself. A simple if condition takes care of that.

In addition to that, we don't want to move Hidden Files, so let's also include all files that start with a dot. The .DS_Store file on macOS is an example of a hidden file.

 # 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

Once we've taken care of the python script and hidden files, we can now move on to creating the folders on the system.

In addition to our check, if the folder already was there when we read the content of the directory, in the beginning, we need a way to track the folders we've already created. That was the reason we declared the created_folders = [] list. It will serve as the memory to track the names of folders.

To create a new folder, the os library provides a method called os.mkdir(folder_path) that takes a path and creates a folder with the given name there.

This method may throw an exception, telling us that the folder already exists. So let's also make sure to catch that error.

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}")

After setting up the folder creation, let's re-execute our script.

python directory_clean.py --path ./test => ... => Folder ./test/pdf created.

On the first run of execution, we can see a list of logs telling us that the folders with the given types of file extensions have been created.

Moving each file into the right subfolder

The last step now is to actually move the files into their new parent folders.

An important thing to understand when working with os operations is that sometimes operations can not be undone. This is, for example, the case with deletion. So it makes sense to first only log out the behavior our script would achieve if we execute it.

This is why the os.rename(...) method has been commented here.

# 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}")

After executing our script and seeing the correct logging, we can now remove the comment hash before our os.rename() method and give it a final go.

# 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.

This final execution will now move all the files into their appropriate folders and our directory will be nicely cleaned up without the need for manual actions.

In the next step, we could now use the script we created above and, for example, schedule it to execute every Monday to clean up our Downloads folder for more structure.

That is exactly what we are creating as a follow-up inside of our Bot Creation and Workflow Automation Udemy course.

A Complete Guide to Bot Creation and Automating Your Everyday Work

Felix and I built an online video course to teach you how to create your own bots based on what we've learned building InstaPy and his Travian-Bot. In fact, he was even forced to take down since it was too effective.

Join right in and start learning.

Jei turite klausimų ar atsiliepimų, nedvejodami susisiekite su mumis „Twitter“ arba tiesiogiai kurso diskusijų skyriuje?