Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
data_path = symbol+'/'+year
print(data_path)
if not os.path.exists('./data/data_path'):
os.makedirs('./data/data_path')
print(data_path) zeigt das richtige Ergebnis:
Alpha/2015
Beta/1999
Gamma2000
Im nächsten Schritt möchte ich prüfen, ob das Verzeichnis schon existiert und eine Datei namens 1.csv.gz befindet. Wenn nicht, dann soll das Verzeichnis angelegt werden und die Datei 1.csv.gz herunter geladen werden. Das Ergebnis ist data/data_path und nicht wie gewünscht data/Alpha/2015 usw..
@aaron: Du wünschst Dir aber './data/data_path' und das bekommst Du auch. Namen in Zeichenketten werden nicht auf magische Weise durch die Werte von Variablen mit dem selben Namen ersetzt. Warum sollte auch data_path ersetzt werden, data aber nicht?
Wie es richtig geht, hast Du doch schon in der ersten Zeile gezeigt.
Noch richtiger ist es, mit os.path.join zu arbeiten:
datapath = os.path.join(symbol, year)
print(datapath)
if not os.path.exists('./data/datapath'):
os.makedirs('./data/datapath')
Die Verzeichnisse
data/
Alpha/2015
Beta/1999
Gamma/2000
werde nicht angelegt, obwohl print(datapath) richtig ausgegeben wird..Es wird wie gehabt data/datapath als Verzeichnisse angelegt.
Ich verstehe was Du meinst, leider habe in keine Idee das Problem richtig zu lösen. auch Google war in diesem Fall nicht hilfreich.
Ich würde mich über einen Lösungsansatz freuen.
aaron hat geschrieben:Ich würde mich über einen Lösungsansatz freuen.
Du hast './data/datapath' und erwartest jetzt offensichtlich, dass `datapath` auf magische Art und Weise durch den Inhalt der vorher deklarierten Variable `datapath` ersetzt wird. Das funktioniert so nicht.
Warum setzt du die Bestandteile './data' und datapath nicht auch einfach mit `os.path.join` zusammen?
Nachdem nun der erste Teil funktioniert möchte ich gern, daß die erzeugten Dateien heruntergeladen werden und in dem richtigen Verzeichnis gespeichert werden. Die Dateien heißen
[codebox=text file=Unbenannt.txt]data/
Alpha/2015/1.csv.gzip
/2.csv.gzip
/3.csv.gzip
Beta/1999/1.csv.gzip
Gamma/2000/1.csv.gzip[/code]
Die Dateien werden nicht in die entsprechenden Verzeichnisse kopiert. Es wird eine Datei data_path erzeugt.
Ich stelle fest, das ich noch immer nicht verstanden habe dieses Problem zu lösen. der erste Teile funktioniert tadellos. Jetzt will ich die Dateien von einem Server https://example.com/symbol/year/1.csv.gz herunterladen und in das entsprechende Verzeichnis schieben, aber nur dann, wenn die Datei nicht vorhanden ist.
Verstehst du warum die durch diesen Code erzeugte Ausgabe so ist wie sie ist? Wenn du die Ausgabe verstehst, dann wende dieses Wissen auf dein Problem mit dem `open('data_path', 'w')` an. Wenn nicht, dann müssten wir von ganz vorne anfangen und dafür gibt es bereits ein Tutorial.
Lewis Carroll - bürgerlich Charles Lutwidge Dodgson, von Beruf Mathematiker - beschreibt den Unterschied um den es hier geht so:
Lewis Carroll hat geschrieben:“You are sad,” the Knight said in an anxious tone: “Let me sing you a song to comfort you.”
“Is it very long?” Alice asked, for she had heard a good deal of poetry that day.
“It's long,” said the Knight, “but it's very, very beautiful. Everybody that hears me sing it - either it brings the tears to their eyes, or else -”
“Or else what?” said Alice, for the Knight had made a sudden pause.
“Or else it doesn't, you know. The name of the song is called ‘Haddocks' Eyes.’”
“Oh, that's the name of the song, is it?" Alice said, trying to feel interested.
“No, you don't understand,” the Knight said, looking a little vexed. “That's what the name is called. The name really is ‘The Aged Aged Man.’”
“Then I ought to have said ‘That's what the song is called’?” Alice corrected herself.
“No, you oughtn't: that's quite another thing! The song is called ‘Ways And Means’: but that's only what it's called, you know!”
“Well, what is the song, then?” said Alice, who was by this time completely bewildered.
“I was coming to that,” the Knight said. “The song really is ‘A-sitting On A Gate’: and the tune's my own invention.”
for symbol in symbol:
for i in range(start_wk, end_wk):
url_data = os.path.join(url, symbol, year, str(i)+url_suffix)
print(url_data)
request = urllib2.Request(url_data)
response = urllib2.urlopen(request)
buf = StringIO(response.read())
f = gzip.GzipFile(fileobj=buf)
data = f.read()
print(len(data))
# Import the file 1.csv.gz from https://example.com/symbol/year/1.csv.gz into the directory data/symbol/year/1.csv.gz
data_path = os.path.join("data", symbol, year)
print(data_path)
if not os.path.exists(data_path):
os.makedirs(data_path)
gzipfile = response.read()
with open(url_data, 'wb') as f:
f.write(gzipfile)
Die Verzeichnisse werden richtig andgelegt:
data/symbol/year
@aaron: Lies doch mal, was Du da geschrieben hast. So eine lange Funktion solltest Du auch dringend in kleinere Teile aufteilen, die Du dann auch separat testen kannst. Es wird wohl nichts passieren, weil Du in einem früheren Lauf schon alle Verzeichnisse erstellt hast. Sollte es doch noch eins geben, das noch nicht existiert hat, dann findet er das Verzeichnis "https:" nicht. Sollte das doch aus irgend einem Grund existieren, wäre wohl die erzeugte Datei leer, weil Du die Daten sie schon vorher komplett gelesen hast.
Ich bekomme es nicht in den Griff. Würde sich bitte jemand herablassen und diese zwei Funktionen für mich schreiben. Ich will auch noch abprüfen ob der Download erfolgreich war oder nicht. Dafür bedarf es wahrscheinlich noch einer weiteren Funktion.
@aaron: wenn das ganze Problem für Dich zu schwierig ist, dann spalte es in Teilprobleme auf, solange, bis Du das Teilproblem lösen kannst. Was sind die drei Dinge, die Du tun willst?