Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # _*_ coding:utf-8 _*_
- from os import listdir
- import sys
- def get_string(message, name="Строка", default=None,
- minimum_length=0, maximum_length=80):
- message += ": " if default is None else " [{0}]: ".format(default)
- while True:
- try:
- line = input(message)
- if not line:
- if default is not None:
- return default
- if minimum_length == 0:
- return ""
- else:
- raise ValueError("{0} не должна быть пустой".format(name))
- if not (minimum_length <= len(line) <= maximum_length):
- raise ValueError("{0} должно быть больше {1} и "
- "меньше {2} символов".format(
- name, minimum_length, maximum_length))
- return line
- except ValueError as err:
- print("ERROR", err)
- def get_integer(message, name="целое число", default=None, minimum=0,
- maximum=100, allow_zero=True):
- class RangeError(Exception): pass
- message += ": " if default is None else " [{0}]: ".format(default)
- while True:
- try:
- line = input(message)
- if not line and default is not None:
- return default
- i = int(line)
- if i == 0:
- if allow_zero:
- return i
- else:
- raise RangeError("{0} не должен быть 0".format(name))
- if not (minimum <= i <= maximum):
- raise RangeError("{0} должен быть между {1} и {2} "
- "включительно {3}".format(name, minimum, maximum,
- (" (или 0)" if allow_zero else "")))
- return i
- except RangeError as err:
- print("ОШИБКА", err)
- except ValueError as err:
- print("ОШИБКА {0} должно быть целым числом".format(name))
- def print_list(inlist):
- if (len(inlist) == 0):
- print("-- Список не содержит элементов --")
- for i in range(0, len(inlist)):
- print(i+1, ": ", inlist[i])
- def create_new_file():
- name = get_string("Введите имя файла: ", "Название", "New_file", 1, 50)
- file = open(name + ".lst","w+")
- file.close()
- return name + ".lst"
- def open_file(name):
- try:
- file = open(name, "r")
- lines = file.read().splitlines()
- while 1:
- print("Список строк: ")
- print_list(lines)
- choice = get_string("[Д]обавить [У]далить [С]охранить [В]ыйти :", "Буква", None, 1, 1) #need to fix!
- if (choice == "Д" or choice == "д"):
- string = get_string("Добавить строку: ", "Строка", None, 0, 50)
- lines.append(string)
- if (choice == "У" or choice == "у"):
- num = get_integer("Введите номер строки для удаления: ", "Номер", None, 1, len(lines))
- lines.pop(num) # NEED TO FIX
- if (choice == "С" or choice == "с"):
- file.close()
- file = open(name, "w+")
- for item in lines:
- file.write(item)
- file.close()
- file = open(name, "r")
- print("Сохранение ", len(lines), " строк в файл ", name)
- if (choice == "В" or choice == "в"):
- file.close()
- sys.exit(0)
- except IOError:
- print("Не могу открыть файл")
- sys.exit(0)
- def menu():
- files = listdir(".")
- files = list(filter(lambda x : x[-4:] == '.lst', files))
- print("Список файлов: \n")
- print_list(files)
- choice = get_integer("Выберите номер файла (или 0 для создания нового файла): ", "Номер", 0, 1,len(files))
- if (choice == 0):
- open_file(create_new_file())
- else:
- if (choice <= len(files)):
- open_file(files[choice-1])
- else:
- print("Error!")
- menu()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement