Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/python3
- # -*- coding: utf-8 -*-
- import os
- import re
- import csv
- import string
- import subprocess
- import time
- import codecs
- from filestart import fileopen
- # Temporäre Datei
- chance = 'chance.txt'
- # Datendatei
- datapool = 'pythoninfo.txt'
- # Bei Änderung der Spalten in headinfo, ist die erste Spalte für die
- # Nummerierung, die restlichen Spalten, sind entsprechend der Datendatei
- # anzupassen!
- headinfo = 'Nummer', 'Python2', 'Python3', 'Info'
- def write_csv(filename, datenpool):
- with codecs.open(filename, "w") as zielfile:
- writer = csv.writer(zielfile, delimiter="\t", quotechar="^")
- writer.writerows(datenpool)
- def writeappend_csv(filename, datenpool):
- with codecs.open(filename, "a") as zielfile:
- writer = csv.writer(zielfile, delimiter="\t", quotechar="^")
- writer.writerows(datenpool)
- def fileclean(filename):
- try:
- os.remove(filename)
- except OSError:
- pass
- def switch(menupoint, result):
- selection(menupoint, result)
- def search_entry(menupoint):
- while True:
- entry = input('\nSuchbegriff: ')
- if entry:
- print("\nListe wird nach Suchbegriff durchsucht!")
- with open(datapool, 'r') as infile:
- reader = csv.reader(infile, delimiter="\t", quotechar="^")
- result = [row for row in reader if any(entry in x for x in row)]
- if not result:
- print('\nEs liegen keine Ergebnisse zu dem Suchbegriff %s vor\n' % entry)
- break
- else:
- selection(menupoint, result)
- break
- def selection(menupoint, result):
- if result:
- # Maximale Zeichenbreite von headinfo
- headmax = [max(len(item) for item in column_items) for column_items in zip(*[headinfo])]
- # Maximale Zeichenbreite von result
- resmax = ([max(len(item) for item in column_items) for column_items in zip(*result)])
- separateline = '{}'.format('-' * (headmax[0]+ resmax[0] + resmax[1] + headmax[3] + len(headinfo) * 10))
- if len(result) == 1:
- print("\nDie Suche ergab folgendes Ergebnis:")
- else:
- print("\nDie Suche ergab folgende Ergebnisse:")
- # Kopfzeile
- counter = 0
- headline = list()
- while True:
- if counter == 0:
- headline.append('{:{}}: '.format(headinfo[0], headmax[0] + 3))
- else:
- headline.append('{:{}}'.format(headinfo[counter], resmax[counter - 1] + 4))
- counter += 1
- if counter == len(headinfo):
- break
- print('{}\n{}\n{}'.format(separateline, ''.join(headline), separateline))
- # Datenprint
- dataline = dict()
- printline = list()
- for index, row in enumerate(result):
- linedata = list()
- printdata = list()
- linedata.append(index + 1)
- printdata.append('{:{}}: '.format(index + 1, headmax[0] + 3))
- counter = 0
- while True:
- linedata.append(row[counter])
- printdata.append('{:{}}'.format(row[counter], resmax[counter] + 4))
- if counter == len(row) - 1:
- dataline[linedata[0]] = [linedata[1:]]
- printline.append(printdata)
- break
- counter += 1
- for row in printline:
- print(''.join(row))
- print(separateline)
- if menupoint == 'suchen':
- return
- result = list()
- while True:
- try:
- selection = int(input('Zeilennummer: '))
- if 0 != selection <= len(dataline):
- for key in dataline:
- if key == selection:
- data = dataline.get(selection)
- print("\nDatensatz wird zur Auswahl hinzu gefügt!\n")
- if os.path.exists('{}/{}'.format(os.getcwd(), chance)):
- writeappend_csv(chance, data)
- else:
- write_csv(chance, data)
- elif selection <= len(dataline):
- for row in dataline.get(key):
- result.append(row)
- break
- else:
- print('Falsche Eingabe, bitte wählen Sie eine Zahl von 1 bis %s aus!' % len(dataline))
- except (ValueError, IndexError):
- print('Falsche Eingabe, bitte wählen Sie eine Zahl von 1 bis %s aus!' % len(dataline))
- while True:
- if len(dataline) > 1:
- selectchance = input('Weitere Auswahl treffen?\n< ja / nein > ')
- if selectchance == 'ja':
- switch(menupoint, result)
- break
- elif 'ja' != selectchance != 'nein':
- print("\nBitte nur ja oder nein eingeben!\n")
- if menupoint == 'ändern':
- load(menupoint)
- break
- elif menupoint == 'löschen':
- remove_entry(menupoint)
- break
- elif menupoint == 'speichern':
- save(menupoint)
- break
- def add_entry(menupoint):
- newdata = list()
- while True:
- for info in headinfo[1:]:
- print('')
- while True:
- infoline = input('Eintrag zu: %s > ' % info)
- if infoline:
- newdata.append(infoline)
- break
- if newdata[0] and newdata[1]:
- take = input('\nMöchten sie diesen Eintrag in die Liste übernehmen?\n %s\n< ja / nein > ' % newdata)
- if take == 'ja':
- print("\nEintrag wird hinzugefügt\n")
- writeappend_csv(datapool, [newdata])
- sort(menupoint)
- break
- elif take == 'nein':
- print("\nEintrag wird nicht hinzugefügt\n")
- break
- else:
- print("\nBitte nur ja oder nein eingeben!\n")
- def load(menupoint):
- if os.path.exists('{}/{}'.format(os.getcwd(), chance)):
- pass
- else:
- search_entry(menupoint)
- return
- while True:
- fileopen(chance) # Textdatei chance mit Standardprogramm des Betriebsystems öffnen
- with open(chance, 'r') as zielfile:
- reader = csv.reader(zielfile, delimiter="\t", quotechar="^")
- olddata = [row for row in reader]
- waitchance = input('\nÄnderung übernehmen?\n< ja / nein > ')
- if waitchance == 'ja':
- with open(chance, 'r') as zielfile:
- reader = csv.reader(zielfile, delimiter="\t", quotechar="^")
- [writeappend_csv(datapool, [row]) for row in reader]
- write_csv(chance, olddata)
- remove_entry(menupoint)
- break
- elif waitchance == 'nein':
- print("\nDie Änderungen werden nicht übernommen!\n")
- break
- else:
- print("\nBitte nur ja oder nein eingeben!\n")
- def remove_entry(menupoint):
- if os.path.exists('{}/{}'.format(os.getcwd(), chance)):
- pass
- else:
- search_entry(menupoint)
- return
- while True:
- with codecs.open(chance, 'r') as zielfile:
- reader = csv.reader(zielfile, delimiter="\t", quotechar="^")
- for row in reader:
- olddata = list(row)
- with codecs.open(datapool, 'r') as zielfile:
- reader = csv.reader(zielfile, delimiter="\t", quotechar="^")
- newlist = [row for row in reader if olddata != row]
- write_csv(datapool, newlist)
- sort(menupoint)
- break
- def sort(menupoint):
- print("\nListe wird sortiert und von doppelten Datensätzen bereinigt!\n")
- while True:
- newlist = set()
- with open(datapool, 'r') as zielfile:
- reader = csv.reader(zielfile, delimiter="\t", quotechar="^")
- for row in reader:
- newlist.add(tuple(row))
- write_csv(datapool, sorted(newlist))
- break
- def quit(menupoint):
- print("\nProgramm wird beendet!\n")
- exit()
- def handle_menu(menu):
- while True:
- print('\n<<< Hauptmenü >>>')
- for index, row in enumerate(menu, 1):
- print("{} {}".format(index, row[0]))
- try:
- fileclean(chance)
- choice = int(input("Nummer: ")) - 1
- menu[choice][1](menu[choice][2])
- except (ValueError, IndexError):
- print("\nBitte nur Zahlen im Bereich 1 - {} eingeben\n".format(
- len(menu)))
- menu = [
- ["Eintrag suchen", search_entry, 'suchen'],
- ["Eintrag hinzufügen", add_entry, 'hinzufügen'],
- ["Eintrag ändern", load, 'ändern'],
- ["Eintrag löschen", remove_entry, 'löschen'],
- ["Beenden", quit, 'beenden']
- ]
- handle_menu(menu)
Add Comment
Please, Sign In to add comment