Advertisement
Guest User

Untitled

a guest
May 19th, 2019
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.95 KB | None | 0 0
  1. '''
  2. --------------
  3. Реализация консольной unix-команды ls в расширенном формате(ls -l)
  4. Платформа: Linux
  5. --------------
  6. '''
  7. import os
  8. import datetime
  9. from pwd import getpwuid
  10. from grp import getgrgid
  11.  
  12. class color:
  13.  
  14.     BLUE = '\033[94m'
  15.     CYAN = '\033[96m'
  16.     END = '\033[0m'
  17.  
  18.  
  19. def get_rights(filename, result_row): #- функция, в которой мы получаем строку с привелегиями для владельца
  20.    
  21.     if (os.path.isdir(filename)):
  22.         rights_path = 'd'
  23.     else:
  24.         rights_path = '-'
  25.    
  26.     if (os.access(filename, os.R_OK)):
  27.         rights_path += 'r'
  28.     else:
  29.         rights_path += '-'
  30.  
  31.     if (os.access(filename, os.W_OK)):
  32.         rights_path += 'w'
  33.     else:
  34.         rights_path += '-'
  35.  
  36.     if (os.access(filename, os.X_OK)):
  37.         rights_path += 'x'
  38.     else:
  39.         rights_path += '-'
  40.  
  41.     result_row.append(rights_path)
  42.  
  43. def get_name_of_owner(filename, result_row): #-получаем имя владельца файла
  44.  
  45.     result_row.append(getpwuid(os.stat(filename).st_uid).pw_name)
  46.  
  47. def get_name_of_group(filename, result_row): # получаем имя владеющей группы
  48.  
  49.     result_row.append(getgrgid(os.stat(filename).st_gid).gr_name)
  50.  
  51. def get_size(filename, result_row): #- получаем размер файла
  52.  
  53.     result_row.append(os.stat(filename).st_size)
  54.  
  55. def get_modification_time(filename, result_row): #время модификации файла
  56.  
  57.     time_in_sec = os.path.getmtime(filename)
  58.     result_row.append(str(datetime.datetime.fromtimestamp(time_in_sec))) #конвертируем из секунд в привычный календарный формат
  59.  
  60. def get_colored_filename(filename, result_row): # "раскрашиваем" имя объекта в зависимости от его типа
  61.    
  62.     if (os.path.isdir(filename)):
  63.         colored_name = color.BLUE + filename + color.END
  64.     elif (os.path.islink(filename)):
  65.         colored_name = color.CYAN + filename + color.END
  66.     else:
  67.         colored_name = filename
  68.  
  69.     result_row.append(colored_name)
  70.  
  71. curr_path = os.getcwd()
  72. dir_list = os.listdir(curr_path)
  73. dir_list.sort()
  74. num_of_obj= len(dir_list)
  75. print ("Total: ", num_of_obj, "files/dir.") # выводим общие число файлов/каталогов
  76. result_array=[]
  77.  
  78. for file in dir_list:
  79.    result_row=[] #-список, содержащий элементы информации для n-го файла
  80.    get_rights(file, result_row)
  81.    get_name_of_owner(file, result_row)
  82.    get_name_of_group(file, result_row)
  83.    get_size(file, result_row)
  84.    get_modification_time(file, result_row)
  85.    get_colored_filename(file, result_row)
  86.    result_array.append(result_row)
  87.  
  88. for row in result_array:
  89.     info_string=''
  90.     for element in row:
  91.         info_string += str(element) + ' '
  92.     print(info_string)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement