Lab 5



In [ ]:


In [ ]:

8) Sa se scrie un script care primeste urmatoarele argumente: path, tree_depth, filesize , filecount, dircount si care creeaza o structura de directoare de adancime depth astfel: incepand din radacina path vor fi create dircount directoare si filecount fisiere cu continut de filesize octeti (doar caracterul "a" de exemplu") iar acest proces va fi repetat recursiv pentru fiecare director creat pana cand se obtine adancimea dorita (in directoarele aflate la adacimea maxima nu se vor crea alte directoare)

separat, in lab5/

9) Sa se creeze un script care afiseaza urmatoarele informatii despre sistem:

versiunea de python folosita. Daca se foloseste Python 2 va afisa in plus mesajul "=== Python 2 ===" iar daca se foloseste Python 3 va afisa in plus mesajul "Running under Py3" (hint: sys.version_info) numele user-ului care a executat scriptul, path-ul complet al scriptului. path-ul directorului in care se afla scriptul, tipul sistemului de operare, numarul de core-uri, directoarele din PATH-ul procesului cate unul pe linie,


In [39]:
import sys
import psutil

print sys.version_info
if sys.version_info.major == 2:
    print '=== Python 2 ==='
elif sys.version_info.major == 3:
    print 'Running under Py3'

print sys.argv[0]
print os.path.dirname(sys.argv[0])
print sys.platform
print psutil.cpu_count() #non-standard #logical=False
#os.cpu_count


sys.version_info(major=2, minor=7, micro=12, releaselevel='final', serial=0)
=== Python 2 ===
c:\python27\lib\site-packages\ipykernel\__main__.py
c:\python27\lib\site-packages\ipykernel
win32
4

10) Sa se scrie o functie search_by_content care primeste ca parametru doua siruri de caractere target si to_search si returneaza o lista de fisiere care contin to_search. Fisierele se vor cauta astfel: daca target este un fisier, se cauta doar in fisierul respectiv iar daca este un director se va cauta recursiv in toate fisierele din acel director. Daca target nu este nici fisier nici director, se va arunca o exceptie de tipul ValueError cu un mesaj corespunzator.


In [ ]:

11) Sa se scrie o functie get_file_info care primeste ca parametru un sir de caractere care reprezinta calea catre un fisier si returneaza un dictionar cu urmatoarele campuri:

full_path = calea absoluta catre fisier, file_size = dimensiunea fisierului in octeti, file_extension = extensia fisierului (daca are) sau "", can_read si can_write = True/False daca se poate citi din/scrie in fisier.


In [26]:
import os
import collections

"""
    full_path = calea absoluta catre fisier, 
    file_size = dimensiunea fisierului in octeti, 
    file_extension = extensia fisierului (daca are) sau "", 
    can_read si can_write = True/False daca se poate citi din/scrie in fisier.
"""
def get_file_info(file_path):
    file_dict = {}
    file_path = os.path.realpath(file_path)
    if os.path.isfile(file_path):
        print file_path
        file_dict["full-path"] = file_path
        file_dict["file_size"] = os.path.getsize(file_path)
        filename, file_extension = os.path.splitext(file_path)
        file_dict["file_extension"] = file_extension
        file_dict["can_read"] = "?" #read open vs diff OS implem
        file_dict["can_write"] = "?" #append ?
    
    #return collections.OrderedDict(sorted(file_dict.items()))
    return sorted(file_dict.items())
    


print 'Result:\n', get_file_info("./plot.py")


Result:
E:\github\ml-stuff\labs-python\plot.py
[('can_read', '?'), ('can_write', '?'), ('file_extension', '.py'), ('file_size', 153L), ('full-path', 'E:\\github\\ml-stuff\\labs-python\\plot.py')]