Seite 1 von 1
Mehrere Textdateien einlesen
Verfasst: Dienstag 10. September 2013, 00:30
von Dami123
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.
Re: Mehrere Textdateien einlesen
Verfasst: Dienstag 10. September 2013, 06:35
von Sirius3
@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?
Re: Mehrere Textdateien einlesen
Verfasst: Dienstag 10. September 2013, 13:30
von Dami123
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
