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.
@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?
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.
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)]"