@DMD: Und wo ist da nun das Problem? Du musst doch einfach nur das was Du ausgibst statt es auszugeben an die Liste anhängen.
Sonstiges: Die ganzen Namen die Du aus `Tkinter` importierst werden überhaupt nicht verwendet.
Auf Modulebene sollte nur Code stehen der Konstanten, Funktionen, und Klassen definiert. Das Hauptprogramm steht üblicherweise in einer Funktion die `main()` heisst.
In einem ``try``/``except`` sollte möglichst wenig Code stehen, also insbesondere keiner der mit der erwarteten Ausnahme nichts zu tun hat. Die Zuweisung von `dirname` kann (fast) keinen Laufzeitfehler auslösen, gehört also vor den ``try``-Block. Ausserdem sollte man keine nackten ``except:``-Anweisungen ohne konkrete Ausnahme(n) verwenden die man dort auch erwartet und behandeln will. Das gilt noch stärker wenn die ”Behandlung” aus komplettem ignorieren der Ausnahme besteht. So schafft man sich Stellen im Programm an denen Fehler nur sehr schwer zu finden sind.
Die Backslashes in dem Pfadliteral zu `dirname` sollte man entweder ”escapen” oder ein ”raw”-Zeichenkettenliteral verwenden. Dieser Wert sollte auch nur einmal definiert werden. Wenn man den Pfad einmal ändert übersieht man sonst sehr leicht einmal eine der Definitionen und das Programm arbeitet dann teilweise mit falschen Pfaden.
Die Schreibweise von `ktoNum` entspricht nicht dem
Style Guide for Python Code. Ausserdem sollte man Namen nicht unnötig abkürzen. `kontonummer` ist viel verständlicher.
`objects`, `objectname`, `objectpath`, und `otype` sind unpassende Namen für die Werte für die sie stehen. Namensgebung ist bei der Programmierung eine sehr wichtige Sache.
Zum verbinden von Pfadteilen verwendet man `os.path.join()`.
Dieser ganze `otype`-Kram ist überflüssig weil das Programm so nur funktioniert wenn der `listdir()`-Aufruf ausschliesslich Unterverzeichnisnamen liefert. Sobald eine normale Datei dabei ist fliegt man beim Versuch einen Pfadnamen für eine DB-Datei damit zu erstellen auf die Nase. Was unter Windows problematisch ist, weil dort zum Beispiel gerne mal Dateien mit Vorschaubildchen für Dateien vom System in Verzeichnissen angelegt werden die man sich mit dem Dateimanager anschaut. Dagegen sollte man sich also schützen.
`datei` ist keine Datei sondern ein Datei*name* beziehungsweise ein kompletter Pfad zu einer Datei.
Das schliessen der Datenbank steht an der falschen Stelle. So wird nur die *letzte* Datenbank explizit wieder geschlossen. Es würde sich die ``with``-Anweisung zusammen mit `contextlib.closing()` anbieten um das schliessen sicherzustellen.
`column` ist wieder ein falcher Name da der Wert nicht für eine Spalte sondern für einen ganzen Datensatz steht.
Warum wird eigentlich so viel selektiert wenn dann sowieso nur ein Wert genommen wird, und das dann auch noch über einen nichtssagenden Index?
Ungetestet:
Code: Alles auswählen
#!/usr/bin/env python
# coding: utf8
import errno
import os
import sqlite3
from contextlib import closing
def main():
base_path = r'C:\Users\DMD-OL\Desktop\Verwaltung Arbeitszeit\Monat'
try:
os.makedirs(base_path)
except OSError as error:
#
# Ignore if path already exists.
#
if error.errno != errno.EEXIST:
raise
kontonummer = 2
result = []
for filename in os.listdir(base_path):
database_path = os.path.join(base_path, filename)
if os.path.isdir(database_path):
result.append(filename)
with closing(
sqlite3.connect(os.path.join(database_path, 'adressenliste.db'))
) as database:
cursor = database.cursor()
cursor.execute(
'SELECT ktoStand FROM adressenliste WHERE ktoNum=?',
(kontonummer,)
)
liste = [[filename, row[0]] for row in cursor]
print liste
print result
if __name__ == '__main__':
main()