Mehrere Textdateien einlesen

Code-Stücke können hier veröffentlicht werden.
Antworten
Dami123
User
Beiträge: 225
Registriert: Samstag 23. Februar 2013, 13:01

Gibt es an dem code was auszusetzen?

Code: Alles auswählen

def import_data():
    data_path = os.path.realpath(os.path.join(os.path.dirname("__file__"), ".."))
    datasets = [data for data in os.listdir(data_path) if data.endswith(".txt")]
    for data in datasets:
        with open("{}\{}".format(data_path, data)) as txt:
            exec "{}={}".format(data[:-4], txt.readlines())

    for data in datasets:
        print "".join(eval(data[:-4]))
Um nicht die ganzen "open()" zu aufzuschreiben, ist es doch einfacher den String in den Variablennamen umzuwandeln, ob das "gut" ist weiß ich aber nicht.
Sirius3
User
Beiträge: 18266
Registriert: Sonntag 21. Oktober 2012, 17:20

@Dami123: Hallo Zauberlehrling. Ich kann an Deiner Frage keine Ironie erkennen. Also muß sie sehr gut versteckt sein.
Scheinbar weißt Du, wie man Pfade zusammensetzt, vergißt das aber in Zeile 5 für einen kurzen Moment wieder.
Nun zum »exec« auf das Deine Frage anspielt. Erst einmal was Du denkst, was Du tust: Du weißt einer Variable mit dem Namen »data[:-4]« eine Liste zu.
Dazu wandelst Du die Liste erst ein eine Repräsentation der Liste um, um sie danach vom Pythoninterpreter wieder parsen zu lassen. Schon da dürften Dir Zweifel kommen, ob das der direkteste Weg ist. Der Dateiname kann nun so ziemlich beliebig sein, so dass Du mit Deinem zusammengebauten Pythonbefehl im günstigsten Fall einfach nur auf die Nase fällst: "if.txt", "23.txt", "datasets.txt", "os.remove('wichtig.txt');a.txt"
Hast Du schonmal was von Dictionaries gehört?
Dami123
User
Beiträge: 225
Registriert: Samstag 23. Februar 2013, 13:01

Dachte mir bereits, dass es ne bessere Lösung geben muss! Hab meine Suche aber danach ausgerichtet Strings in Variablennamen umzuwandeln, und auch ne "Möglichkeit" gefunden.

Danke für den Tipp mit den Dictionaries ;)

Code: Alles auswählen

def import_data():
    data_path = os.path.realpath(os.path.join(os.path.dirname("__file__"), ".."))
    datasets = [data for data in os.listdir(data_path) if data.endswith(".txt")]
    sets = {}
    for data in datasets:
        with open(os.path.join(data_path, data)) as txt:
            sets[data]=txt.readlines()

    for data in datasets:
        print "\n".join(sets[data])
Edit:
"filter(P, S) is almost always written clearer as [x for x in S if P(x)]"

- Guido van Rossum on Python
Direkt angepasst :D
Antworten