Lab 7

1) Scrieti un program care la fiecare x secunde unde x va fi aleator ales la fiecare iteratie (din intervalul [a, b] , unde a, b sunt date ca argumente) afiseaza de cate minute ruleaza programul (in minute, cu doua zecimale). Programul va rula la infinit.


In [2]:
import time
import random

#import sys
#a = int(sys.argv[1])
#b = int(sys.argv[2])

def wait(x):
    time.sleep(x)

def time_cron(a,b):
    time_interval = random.uniform(a,b)
    # while(1):
    # measure process time
    t0 = time.clock()
    wait(time_interval)
    print time.clock() - t0, "seconds process time"
    
    # measure wall time
    t0 = time.time()
    wait(time_interval)
    print time.time() - t0, "seconds wall time"

time_cron(0,2)


1.97802754693 seconds process time
1.97099995613 seconds wall time

2) Scrieti doua functii de verificare daca un numar este prim, si verificati care dintre ele este mai eficienta din punct de vedere al timpului.


In [ ]:

3) Gasiti toate fisierele duplicate dintr-un director dat ca argument si afisati timpul de rulare. Calea grupurilor de fisiere duplicate vor fi scrise intr-un fisier output.txt. (duplicat in fct de continut)


In [ ]:

4) Sa se scrie un script care primeste ca argument un director si creeaza un fisier JSON cu date despre toate fisierele din acel director. Pentru fiecare fisier vor fi afisate urmatoarele informatii: nume_fisier, md5_fisier, sha256_fisier, size_fisier (in bytes), cand a fost creat fisierul (in format human-readable) si calea absoluta catre fisier.


In [1]:
import os
import json
import hashlib
import time

def get_file_md5(filePath):
    h = hashlib.md5()
    h.update(open(filePath,"rb").read())
    return h.hexdigest()

def get_file_sha256(filePath):
    h = hashlib.sha256()
    h.update(open(filePath,"rb").read())
    return h.hexdigest()


def get_dir_data(dir_path):
    json_data = {}
    dir_path = os.path.realpath(dir_path)
    
    json_file = open(os.path.basename(dir_path) + '.json', 'w')
    
    print next(os.walk(dir_path))[2]
    #print os.path.basename(dir_path)
    
    for dir_file in next(os.walk(dir_path))[2]:
        file_data = {}
        
        #file_data["file_name"] = dir_file
        file_data[dir_file] = {}
        file_data[dir_file]["file_md5"] = get_file_md5(dir_file)
        file_data[dir_file]["file_sha256"] = get_file_sha256(dir_file)
        file_data[dir_file]["file_size"] = os.path.getsize(dir_file)
        
        file_time = time.gmtime(os.path.getctime(dir_file))
        file_data[dir_file]["file_time"] = time.strftime("%Y-%m-%d %I:%M:%S %p", file_time)
        file_data[dir_file]["file_path"] = os.path.realpath(dir_file)
        
        #print file_data
        json_data.update(file_data)
        #print json_data
    
    #print json_data
    json_data = json.dumps(json_data, sort_keys = True, indent=4, separators=(',', ': '))
    json_file.write( json_data )
    
    json_file.close()
    
get_dir_data('./')


['data.json', 'labs-python.json', 'plot.py', 'py-extra-del.ipynb', 'PythonLab-5.ipynb', 'PythonLab-6.ipynb', 'PythonLab-7.ipynb', 'PythonLabs.ipynb']

5) Sa se creeze doua scripturi care sa comunice intre ele prin date serializate. Primul script va salva periodic o lista cu toate fisierele dintr-un director iar al doilea script va adauga intr-o arhiva toate fisierele cu size mai mic de 100kb si modificate cu cel mult 5 minute in urma (nu va fi adaugat acelasi fisier de 2 ori).


In [ ]:

6) Sa se scrie un script care afiseaza in ce zi a saptamanii este anul nou, pentru ultimii x ani (x este dat ca argument).


In [13]:
import datetime as dt

def weekday_new_year(x):
    today = dt.datetime.today()
    current_year = today.year
    #print today, '::', current_year
    
    for i in range(0, x):
        print current_year-i, ': ', dt.date(current_year-i, 1, 31).strftime("%A") #.weekday() shows only no
    

weekday_new_year(5)


2016 :  Sunday
2015 :  Saturday
2014 :  Friday
2013 :  Thursday
2012 :  Tuesday

7) Sa se simuleze extragerea 6/49.


In [ ]: