Guest User

Untitled

a guest
Dec 10th, 2018
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.64 KB | None | 0 0
  1. #!/usr/bin/python3
  2. # -*- coding: utf-8 -*-
  3.  
  4.  
  5. import os
  6. import re
  7. import csv
  8. import string
  9. import subprocess
  10. import time
  11. import codecs
  12.  
  13. from filestart import fileopen
  14.  
  15.  
  16. # Temporäre Datei
  17. chance = 'chance.txt'
  18. # Datendatei
  19. datapool = 'pythoninfo.txt'
  20. # Bei Änderung der Spalten in headinfo, ist die erste Spalte für die
  21. # Nummerierung, die restlichen Spalten, sind entsprechend der Datendatei
  22. # anzupassen!
  23. headinfo = 'Nummer', 'Python2', 'Python3', 'Info'
  24.  
  25.  
  26.  
  27. def write_csv(filename, datenpool):
  28. with codecs.open(filename, "w") as zielfile:
  29. writer = csv.writer(zielfile, delimiter="\t", quotechar="^")
  30. writer.writerows(datenpool)
  31.  
  32.  
  33. def writeappend_csv(filename, datenpool):
  34. with codecs.open(filename, "a") as zielfile:
  35. writer = csv.writer(zielfile, delimiter="\t", quotechar="^")
  36. writer.writerows(datenpool)
  37.  
  38.  
  39. def fileclean(filename):
  40. try:
  41. os.remove(filename)
  42. except OSError:
  43. pass
  44.  
  45.  
  46. def switch(menupoint, result):
  47. selection(menupoint, result)
  48.  
  49.  
  50. def search_entry(menupoint):
  51. while True:
  52. entry = input('\nSuchbegriff: ')
  53. if entry:
  54. print("\nListe wird nach Suchbegriff durchsucht!")
  55. with open(datapool, 'r') as infile:
  56. reader = csv.reader(infile, delimiter="\t", quotechar="^")
  57. result = [row for row in reader if any(entry in x for x in row)]
  58. if not result:
  59. print('\nEs liegen keine Ergebnisse zu dem Suchbegriff %s vor\n' % entry)
  60. break
  61. else:
  62. selection(menupoint, result)
  63. break
  64.  
  65.  
  66. def selection(menupoint, result):
  67. if result:
  68. # Maximale Zeichenbreite von headinfo
  69. headmax = [max(len(item) for item in column_items) for column_items in zip(*[headinfo])]
  70.  
  71. # Maximale Zeichenbreite von result
  72. resmax = ([max(len(item) for item in column_items) for column_items in zip(*result)])
  73. separateline = '{}'.format('-' * (headmax[0]+ resmax[0] + resmax[1] + headmax[3] + len(headinfo) * 10))
  74.  
  75. if len(result) == 1:
  76. print("\nDie Suche ergab folgendes Ergebnis:")
  77. else:
  78. print("\nDie Suche ergab folgende Ergebnisse:")
  79.  
  80. # Kopfzeile
  81. counter = 0
  82. headline = list()
  83. while True:
  84. if counter == 0:
  85. headline.append('{:{}}: '.format(headinfo[0], headmax[0] + 3))
  86. else:
  87. headline.append('{:{}}'.format(headinfo[counter], resmax[counter - 1] + 4))
  88. counter += 1
  89. if counter == len(headinfo):
  90. break
  91. print('{}\n{}\n{}'.format(separateline, ''.join(headline), separateline))
  92.  
  93.  
  94. # Datenprint
  95. dataline = dict()
  96. printline = list()
  97. for index, row in enumerate(result):
  98. linedata = list()
  99. printdata = list()
  100. linedata.append(index + 1)
  101. printdata.append('{:{}}: '.format(index + 1, headmax[0] + 3))
  102. counter = 0
  103. while True:
  104. linedata.append(row[counter])
  105. printdata.append('{:{}}'.format(row[counter], resmax[counter] + 4))
  106. if counter == len(row) - 1:
  107. dataline[linedata[0]] = [linedata[1:]]
  108. printline.append(printdata)
  109. break
  110. counter += 1
  111. for row in printline:
  112. print(''.join(row))
  113. print(separateline)
  114.  
  115. if menupoint == 'suchen':
  116. return
  117.  
  118. result = list()
  119. while True:
  120. try:
  121. selection = int(input('Zeilennummer: '))
  122. if 0 != selection <= len(dataline):
  123. for key in dataline:
  124. if key == selection:
  125. data = dataline.get(selection)
  126. print("\nDatensatz wird zur Auswahl hinzu gefügt!\n")
  127. if os.path.exists('{}/{}'.format(os.getcwd(), chance)):
  128. writeappend_csv(chance, data)
  129. else:
  130. write_csv(chance, data)
  131. elif selection <= len(dataline):
  132. for row in dataline.get(key):
  133. result.append(row)
  134. break
  135. else:
  136. print('Falsche Eingabe, bitte wählen Sie eine Zahl von 1 bis %s aus!' % len(dataline))
  137. except (ValueError, IndexError):
  138. print('Falsche Eingabe, bitte wählen Sie eine Zahl von 1 bis %s aus!' % len(dataline))
  139.  
  140. while True:
  141. if len(dataline) > 1:
  142. selectchance = input('Weitere Auswahl treffen?\n< ja / nein > ')
  143. if selectchance == 'ja':
  144. switch(menupoint, result)
  145. break
  146. elif 'ja' != selectchance != 'nein':
  147. print("\nBitte nur ja oder nein eingeben!\n")
  148. if menupoint == 'ändern':
  149. load(menupoint)
  150. break
  151. elif menupoint == 'löschen':
  152. remove_entry(menupoint)
  153. break
  154. elif menupoint == 'speichern':
  155. save(menupoint)
  156. break
  157.  
  158. def add_entry(menupoint):
  159. newdata = list()
  160. while True:
  161. for info in headinfo[1:]:
  162. print('')
  163. while True:
  164. infoline = input('Eintrag zu: %s > ' % info)
  165. if infoline:
  166. newdata.append(infoline)
  167. break
  168. if newdata[0] and newdata[1]:
  169. take = input('\nMöchten sie diesen Eintrag in die Liste übernehmen?\n %s\n< ja / nein > ' % newdata)
  170. if take == 'ja':
  171. print("\nEintrag wird hinzugefügt\n")
  172. writeappend_csv(datapool, [newdata])
  173. sort(menupoint)
  174. break
  175. elif take == 'nein':
  176. print("\nEintrag wird nicht hinzugefügt\n")
  177. break
  178. else:
  179. print("\nBitte nur ja oder nein eingeben!\n")
  180.  
  181.  
  182. def load(menupoint):
  183. if os.path.exists('{}/{}'.format(os.getcwd(), chance)):
  184. pass
  185. else:
  186. search_entry(menupoint)
  187. return
  188.  
  189. while True:
  190. fileopen(chance) # Textdatei chance mit Standardprogramm des Betriebsystems öffnen
  191. with open(chance, 'r') as zielfile:
  192. reader = csv.reader(zielfile, delimiter="\t", quotechar="^")
  193. olddata = [row for row in reader]
  194. waitchance = input('\nÄnderung übernehmen?\n< ja / nein > ')
  195. if waitchance == 'ja':
  196. with open(chance, 'r') as zielfile:
  197. reader = csv.reader(zielfile, delimiter="\t", quotechar="^")
  198. [writeappend_csv(datapool, [row]) for row in reader]
  199. write_csv(chance, olddata)
  200. remove_entry(menupoint)
  201. break
  202. elif waitchance == 'nein':
  203. print("\nDie Änderungen werden nicht übernommen!\n")
  204. break
  205. else:
  206. print("\nBitte nur ja oder nein eingeben!\n")
  207.  
  208.  
  209. def remove_entry(menupoint):
  210. if os.path.exists('{}/{}'.format(os.getcwd(), chance)):
  211. pass
  212. else:
  213. search_entry(menupoint)
  214. return
  215.  
  216. while True:
  217. with codecs.open(chance, 'r') as zielfile:
  218. reader = csv.reader(zielfile, delimiter="\t", quotechar="^")
  219. for row in reader:
  220. olddata = list(row)
  221. with codecs.open(datapool, 'r') as zielfile:
  222. reader = csv.reader(zielfile, delimiter="\t", quotechar="^")
  223. newlist = [row for row in reader if olddata != row]
  224. write_csv(datapool, newlist)
  225. sort(menupoint)
  226. break
  227.  
  228.  
  229. def sort(menupoint):
  230. print("\nListe wird sortiert und von doppelten Datensätzen bereinigt!\n")
  231. while True:
  232. newlist = set()
  233. with open(datapool, 'r') as zielfile:
  234. reader = csv.reader(zielfile, delimiter="\t", quotechar="^")
  235. for row in reader:
  236. newlist.add(tuple(row))
  237. write_csv(datapool, sorted(newlist))
  238. break
  239.  
  240.  
  241.  
  242. def quit(menupoint):
  243. print("\nProgramm wird beendet!\n")
  244. exit()
  245.  
  246.  
  247. def handle_menu(menu):
  248. while True:
  249. print('\n<<< Hauptmenü >>>')
  250. for index, row in enumerate(menu, 1):
  251. print("{} {}".format(index, row[0]))
  252. try:
  253. fileclean(chance)
  254. choice = int(input("Nummer: ")) - 1
  255. menu[choice][1](menu[choice][2])
  256. except (ValueError, IndexError):
  257. print("\nBitte nur Zahlen im Bereich 1 - {} eingeben\n".format(
  258. len(menu)))
  259.  
  260.  
  261. menu = [
  262. ["Eintrag suchen", search_entry, 'suchen'],
  263. ["Eintrag hinzufügen", add_entry, 'hinzufügen'],
  264. ["Eintrag ändern", load, 'ändern'],
  265. ["Eintrag löschen", remove_entry, 'löschen'],
  266. ["Beenden", quit, 'beenden']
  267. ]
  268.  
  269. handle_menu(menu)
Add Comment
Please, Sign In to add comment