Я написал инструмент в python, где вы вводите заголовок, контент, затем теги, и запись затем сохраняется в файле pickle. он был в основном разработан для функции копирования-вставки (вы видите фрагмент кода, который вам нравится в сети, копируете его и вставляете в программу), а не собственно для рукописного контента, хотя он делает это без проблем.Инструмент личного архива, ищущий предложения по улучшению кода
Я в основном делал это, потому что я всегда просматриваю свои pdf-файлы, книги или сеть для некоторого примера кодирования решения, которое я уже видел раньше, и просто казалось логичным иметь что-то, где вы могли бы просто вставьте контент, дайте ему название и теги, и просто посмотрите его, когда вам нужно.
Я понимаю, что есть сайты в Интернете, которые обрабатывают этот ex. http://snippets.dzone.com, но я не всегда в сети, когда я код. Я также признаю, что я действительно не смотрел, чтобы кто-нибудь написал настольное приложение, проект казался забавным, чтобы сделать это здесь.
он не был разработан с учетом миллионов записей, поэтому я просто использую файл pickle для сериализации данных вместо одного из API баз данных. запрос также очень простой, только заголовок и теги, а не ранжирование по запросу.
есть проблема, которую я не могу понять, когда вы в списке записей есть попытка, кроме предложения, где он пытается поймать действительный индекс (целое число). если вы введете целое число inavlid, оно попросит вас ввести действительное значение, но, похоже, оно не может назначить его переменной. если вы сразу вводите действительное целое число, проблем нет, и запись будет отображаться.
в любом случае дайте мне знать, что вы, ребята, думаете. это закодировано для python3.
основной файл:
#!usr/bin/python
from archive_functions import Entry, choices, print_choice, entry_query
import os
def main():
choice = ''
while choice != "5":
os.system('clear')
print("Mo's Archive, please select an option")
print('====================')
print('1. Enter an entry')
print('2. Lookup an entry')
print('3. Display all entries')
print('4. Delete an entry')
print('5. Quit')
print('====================')
choice = input(':')
if choice == "1":
entry = Entry()
entry.get_data()
entry.save_data()
elif choice == "2":
queryset = input('Enter title or tag query: ')
result = entry_query('entry.pickle', queryset)
if result:
print_choice(result, choices(result))
else:
os.system('clear')
print('No Match! Please try another query')
pause = input('\npress [Enter] to continue...')
elif choice == "3":
queryset = 'all'
result = entry_query('entry.pickle', queryset)
if result:
print_choice(result, choices(result))
elif choice == "4":
queryset = input('Enter title or tag query: ')
result = entry_query('entry.pickle', queryset)
if result:
entry = result[choices(result)]
entry.del_data()
else:
os.system('clear')
print('No Match! Please try another query')
pause = input('\npress [Enter] to continue...')
elif choice == "5":
break
else:
input('please enter a valid choice...')
main()
if __name__ == "__main__":
main()
archive_functions.py:
#!/bin/usr/python
import sys
import pickle
import os
import re
class Entry():
def get_data(self):
self.title = input('enter a title: ')
print('enter the code, press ctrl-d to end: ')
self.code = sys.stdin.readlines()
self.tags = input('enter tags: ')
def save_data(self):
with open('entry.pickle', 'ab') as f:
pickle.dump(self, f)
def del_data(self):
with open('entry.pickle', 'rb') as f:
data_list = []
while True:
try:
entry = pickle.load(f)
if self.title == entry.title:
continue
data_list.append(entry)
except:
break
with open('entry.pickle', 'wb') as f:
pass
with open('entry.pickle', 'ab') as f:
for data in data_list:
data.save_data()
def entry_query(file, queryset):
'''returns a list of objects matching the query'''
result = []
try:
with open(file, 'rb') as f:
entry = pickle.load(f)
os.system('clear')
if queryset == "all":
while True:
try:
result.append(entry)
entry = pickle.load(f)
except:
return result
break
while True:
try:
if re.search(queryset, entry.title) or re.search(queryset, entry.tags):
result.append(entry)
entry = pickle.load(f)
else:
entry = pickle.load(f)
except:
return result
break
except:
print('no entries in file, please enter an entry first')
pause = input('\nPress [Enter] to continue...')
def choices(list_result):
'''takes a list of objects and returns the index of the selected object'''
os.system('clear')
index = 0
for entry in list_result:
print('{}. {}'.format(index, entry.title))
index += 1
try:
choice = int(input('\nEnter choice: '))
return choice
except:
pause = input('\nplease enter a valid choice')
choices(list_result)
def print_choice(list_result, choice):
'''takes a list of objects and an index and displays the index of the list'''
os.system('clear')
print('===================')
print(list_result[choice].title)
print('===================')
for line in list_result[choice].code:
print(line, end="")
print('\n\n')
back_to_choices(list_result)
def back_to_choices(list_result):
print('1. Back to entry list')
print('2. Back to Main Menu')
choice = input(':')
if choice == "1":
print_choice(list_result, choices(list_result))
elif choice == "2":
pass
else:
print('\nplease enter a valid choice')
back_to_choices(list_result)
для инструментов командной строки, есть модуль под названием «cmd», который я использовал несколько раз. Это может облегчить вашу жизнь. –