Advertisement
Guest User

Untitled

a guest
Nov 19th, 2018
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.16 KB | None | 0 0
  1. import os
  2.  
  3. # Возвращает название файла с которым потом будет работа
  4. def lst_file():
  5.     lst =[i for i in list(os.listdir()) if ".lst" in i]
  6.     if len(lst)==0: print ("Файлов с расширением .lst в каталоге нет")
  7.     else:
  8.         i=1
  9.         for f in lst:
  10.             print('%d. ' %i,f)
  11.             i+=1
  12.        
  13.     while True:
  14.         num=input("Выберите номер файла (или 0 для создания нового файла): ")
  15.         try:
  16.             num=int(num)
  17.             if num<0:
  18.                 raise ValueError("ERROR num < 0")
  19.             elif num>i-1:
  20.                 raise ValueError("ERROR num > len")
  21.             else:
  22.                 break
  23.         except ValueError:
  24.             print("ERROR input")
  25.        
  26.        
  27.     if num==0:
  28.         f_name=input("Выберите имя файла: ")+".lst"
  29.         f=open(f_name,"w")
  30.         f.close()
  31.         return f_name
  32.    
  33.     return(lst[num-1])
  34.  
  35. # Добавление строки
  36. def dobavit(stl):
  37.     st=input('Добавить строку: ')
  38.     stl.append(st)
  39.     return stl
  40.  
  41. # Удаление строки по номеру
  42. def udalit(stl):
  43.     while True:
  44.         num=int(input('Введите номер строки для удаления (или 0 для выхода): '))
  45.         try:
  46.             num=int(num)
  47.             if num<0:
  48.                 raise ValueError("ERROR num < 0")
  49.             elif num>len(stl):
  50.                 raise ValueError("ERROR num > len")
  51.             else:
  52.                 break
  53.         except ValueError:
  54.             print("ERROR input")
  55.        
  56.     if num==0:
  57.         return stl
  58.     else:
  59.         del stl[num-1]
  60.        
  61.     return stl
  62.  
  63. # Сохранение списка строк в файл    
  64. def save(stl, f_name):
  65.     f=open(f_name,"w")
  66.     for x in stl:
  67.         f.write(x)
  68.     f.close()
  69.     print('Сохранение ',len(stl),' строк в файл ',f_name)
  70.    
  71. # Выход с учётом сохранения
  72. def exitt(stl,f_name):
  73.     ch=input('Сохранить изменения (д/н): ')
  74.     while ch not in ['Д','д','Н','н']:
  75.         ch = input('Введите одну из команд:Дд,Нн : ')
  76.     if ch=='Д' or ch=='д':
  77.         save(stl,f_name)
  78.     print('--Работа с файлом закончена--')
  79.  
  80. # Меню, в котором вызяваются функции
  81. def menu(char, stl, f_name):
  82.     if char=='Д' or char=='д':
  83.         dobavit(stl)
  84.     if char=='У' or char=='у':
  85.         udalit(stl)
  86.     if char=='С' or char=='с':
  87.         save(stl,f_name)
  88.     if char=='В' or char=='в':
  89.         exitt(stl,f_name)
  90.    
  91. # Функция обработки приёма символа для действия
  92. def take_char(count):
  93.     if count==0:
  94.         char=input('[Д]обавить [В]ыйти : ')
  95.         while char not in ['Д','д','В','в']:
  96.             char = input('Введите одну из команд:Дд,Вв : ')
  97.     else:
  98.         char=input('[Д]обавить [У]далить [С]охранить [В]ыйти : ')
  99.         while char not in ['Д','д','У','у','С','с','В','в']:
  100.             char = input('Введите одну из команд:Дд,Уу,Сс,Вв : ')
  101.    
  102.  
  103.     return char
  104.        
  105. # Функция печати списка строк
  106. def print_str(stl):
  107.     print('\nСписок строк:')
  108.     if len(stl)==0:
  109.         print('--Список не содержит элементов--')
  110.     else:
  111.         i=1
  112.         for x in stl:
  113.             print('%d: '%i,x)
  114.             i+=1
  115.            
  116. # Функция работы с файлом
  117. def work_w_file(f_name):
  118.     f=open(f_name,"r")
  119.     stl_str=[]
  120.    
  121.     while True:
  122.         stroka=f.readline()
  123.         if stroka=='': break
  124.         stl_str.append(stroka)
  125.     f.close()
  126.    
  127.     while True:
  128.         count=len(stl_str)
  129.         print_str(stl_str)
  130.         char=take_char(count)
  131.         menu(char,stl_str, f_name)
  132.         if char=='В' or char=='в': break
  133.        
  134.  
  135.  
  136. #Тело программы
  137. file=lst_file()
  138. print(file)
  139. work_w_file(file)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement