Created
August 29, 2012 17:52
-
-
Save anonymous/3516212 to your computer and use it in GitHub Desktop.
Tool zur Dokumentation der Änderungen von Python2 zu Python3 und Suchfunktion.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/python3 | |
# -*- coding: utf-8 -*- | |
''' | |
Nehmen Sie hier Ihre persöhnliche Einstellungen vor. | |
:param:datapool | |
Datei in dem die Daten enthalten sind. | |
:param:headinfo | |
Spaltenbenennung, bezogen auf die Datendatei. | |
Es müssen dazu nicht alle Spalten der Datendatei aufgelistet werden. | |
Wichtig ist aber, daß die Spaltenangaben von links (Spalte "0") | |
fortlaufend beginnen! | |
FALSCH: Spalte[0], Spalte[3], Spalte[4], Spalte[7], | |
RICHTIG: Spalte[0], Spalte[1], Spalte[2], Spalte[3], Spalte[4], Spalte[5], Spalte[6], Spalte[7], | |
''' | |
# Datendatei | |
datapool = 'pythoninfo.txt' | |
#datapool = 'LISTE_ARTIKELGESAMT.txt' | |
# Kopfzeile, Spaltenbenennung der Datendatei. | |
# Lese dazu den DOC-String! | |
headinfo = 'Python2', 'Python3', 'Info' | |
#headinfo = 'Hersteller', 'H-Nummer', 'VE', 'Inhalt', 'Beschreibung' |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/python3 | |
# -*- coding: utf-8 -*- | |
import os | |
import re | |
import csv | |
import string | |
import subprocess | |
import time | |
import codecs | |
from privatparam import datapool, headinfo | |
from filestart import fileopen | |
# Temporäre Datei | |
chance = 'chance.txt' | |
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 head(): | |
# Index-Spalte zu Liste headinfo | |
head = list() | |
head.append('Nummer') | |
[head.append(line) for line in headinfo] | |
return head | |
def maxsign(bighead, datalist): | |
headmax = ([max(len(item) for item in column_items) for column_items in zip(*bighead)]) | |
resmax = ([max(len(item) for item in column_items) for column_items in zip(*datalist)]) | |
# Maximale Zeichenbreite von resmax mit headmax vergleichen | |
rowmax = dict() | |
for i in range(len(headmax)): | |
if headmax[i] and i == 0: | |
rowmax[i] = headmax[i] + 4 | |
elif headmax[i] and i > 0: | |
rowmax[i] = max(headmax[i], resmax[i - 1]) + 4 | |
return rowmax | |
def headline(rowmax, bighead): | |
headlist = list() | |
for i in range(len(bighead)): | |
if i == 0: | |
headlist.append((bighead[0] + ': ').rjust(rowmax.get(i))) | |
else: | |
headlist.append(bighead[i].ljust(rowmax.get(i))) | |
separateline = (sum([rowmax.get(i) for i in range(len(rowmax))]) - 2) * '-' | |
headprint = '\n'.join([separateline, ('').join(headlist), separateline]) | |
return separateline, headprint | |
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: | |
# Kopfzeile mit Indexspalte kompletieren | |
bighead = head() | |
# Maximale Zeichenbreite | |
rowmax = maxsign([bighead], result) | |
# Kopfzeile | |
separateline, headprint = headline(rowmax, bighead) | |
# Index erstellen und die einzelnen Spalten zeilenweise einlesen | |
# Zuweisen der maximalen Zeichenbreite für Printausgabe. | |
# Einheitliches, spaltenbezogenes Printlayout | |
dataline = dict() | |
printline = list() | |
for index, row in enumerate(result): | |
data = list() | |
printdata = list() | |
data.append(index + 1) | |
printdata.append((str(index + 1) + ': ').rjust(rowmax.get(0))) | |
printdata.append(row[0].ljust(rowmax.get(1))) | |
for i in range(1, len(row)): | |
data.append(row[i]) | |
if rowmax.get(i + 1): | |
printdata.append(row[i].ljust(rowmax.get(i + 1))) | |
dataline[data[0]] = [row[0:]] | |
printline.append(printdata) | |
if len(result) == 1: | |
print("\nDie Suche ergab folgendes Ergebnis:") | |
else: | |
print("\nDie Suche ergab folgende Ergebnisse:") | |
# Ausgabe Konsole/Terminal | |
print(headprint) | |
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(os.path.join(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: | |
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 not os.path.exists(os.path.join(os.getcwd(), chance)): | |
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 not os.path.exists(os.path.join(os.getcwd(), chance)): | |
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) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | |
xrange range xrange unter Python3 nicht mehr nutzbar |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment