Skip to content

Instantly share code, notes, and snippets.

Created August 26, 2012 17:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save anonymous/3481807 to your computer and use it in GitHub Desktop.
Save anonymous/3481807 to your computer and use it in GitHub Desktop.
Tool zur Dokumentation der Änderungen von Python2 zu Python3 und Suchfunktion.
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import os
import platform
import subprocess
'''
Ermittelt das Betriebssystem mit dem dazugehörigen Programmstarter
und öffnet die an fileopen übergebene Datei damit.
Damit das Modul eingesetzt werden kann, muß dieses importiert werden.
from filestart import fileopen
Der Aufruf lautet:
fileopen(filename)
'''
def filestarter():
'''
Betriebssytem ermitteln und Programmstarter
an Funktion fileopen übergeben.
'''
try:
return {'Windows': 'start',
'Linux': 'xdg-open',
'Darwin': 'open'
}[platform.system()]
except KeyError:
raise RuntimeError(
'Für Ihr Betriebssystem\n%s\nkonnte kein passender Starter ermittelt werden!' % platform.platform())
def fileopen(filename):
'''
Datei mit Programmstarter von Funktion fileopen öffnen.
'''
try:
default_program = filestarter()
except RuntimeError as e:
print(e)
print('\nÖffnen Sie zum Editieren der Datei %s einen Texteditor.\nDie Datei %s befindet sich unter\n%s.' % (filename, chance, os.path.realpath(filename)))
else:
print('Datei %s wird mit dem Standardprogramm\nIhres Betriebsystem zum Editieren geöffnet!' % filename)
process = subprocess.Popen([default_program, filename])
process.wait()
#!/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)
2 3 6
Flöte Gänse 3
Tkinter tkinter Namensänderung von Modul Tkinter, neuer Modulnamen ist tkinter. Statt 'from Tkinter import tkinter' gilt nun 'import tkinter'
execfile() - Ab Python3 entfällt execfile()
from email.MIMEBase import MIMEBase from email.mime.base import MIMEBase Namensänderung von Modul email.MIMEBase, neuer Modulnamen ist email.mime.base
from email.MIMEImage import MIMEImage from email.mime.image import MIMEImage Namensänderung von Modul email.MIMEImage, neuer Modulnamen ist email.mime.image
from email.MIMEMultipart import MIMEMultipart from email.mime.multipart import MIMEMultipart Namensänderung von Modul email.MIMEMultipart, neuer Modulnamen ist email.mime.multipart
from email.MIMEText import MIMEText from email.mime.text import MIMEText Namensänderung von Modul email.MIMEText, neuer Modulnamen ist email.mime.text
keiner hats wer
print print() print(obj), Objekt muss in Klammern eingeschlossen sein.
raw_input() input() raw_input() wurde durch input() ersetzt.
sys.maxint sys.maxsize Änderung, jedes Vorkommen von sys.maxint wird zu sys.maxsize
test TEST Änderung
tkFont tkinter.font Namensänderung von Modul tkFont, neuer Modulnamen ist tkinter.font
tkMessageBox tkinter.messagebox Namensänderung von Modul tkMessageBox, neuer Modulnamen ist tkinter.messagebox
tkSimpleDialog tkinter.simpledialog Namensänderung von Modul tkSimpleDialog, neuer Modulnamen ist tkinter.simpledialog
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment