Vorbereiten von csv Dateien zum Download von einem entfernten Server. Es sollen
jeden Montag um 06:00 Uhr (UTC) 21 csvi.gz Dateien mit einer Dateigröße von ca.
8,4 Megabyte heruntergeladen werden. Der erste Download wird aber eine Größe
von 11,8 Gigabyte haben. Danach werden es wöchentlich ca. 177 Megabyte sein.
Nachdem die entsprechenden Dateien in den Verzeichnissen data/symbol/year/1.csv.gzip
bis 52.csv.gzip liegen sollen diese bei Bedarf in eine SQL Datenbank importiert
werden.
Mein Pflichtenheft
1. Downloaden der Dateien
1.1 Wie werden Probleme beim Download durch Verbindungsabbrüche behandelt? Wie oft
soll der Download neu angestoßen werden? Wie geht man mit fehlerhaften
csv.gzip Dateien um?
1.2 Versenden eines Logfiles per Mail.
2. Import in eine SQL Datenbank
2.1 Der Import soll ebenso überwacht werden, wie der Download der csv Dateien.
2.2 Entpacken der Dateien
2.3 Wie werden Probleme beim Import durch Verbindungsabbrüche oder fehlerhafte
Daten behandelt?
2.4 Nach dem Download können die csv.gzip Dateien gelöscht werden. Beim nächsten
Update sollen diese Dateien nicht wieder heruntergeladen werden. Erfolgt kein
Import in eine Datenbank, dann dürfen die Dateien nicht gelöscht werden.
2.3 Versenden eines Logfiles per Mail.
Ich möchte folgende Funktionen schreiben
1. Erstellen einer Funktion, die die Dateien zum Download vorbereitet.
2. Herunterladen und Speichern der Dateien in den entsprechenden Verzeichnissen.
3. Schreiben eines Logfiles und Versenden des Logfiles per Mail.
4. Import der csv.gzip Dateien in eine Datenbank
Ich habe auch ein github repo eingerichtet.
Ich habe heute schon versucht das Script zu strukturieren. Leider bisher ohne Erfolg. Ich freue mich über jede Kritik und Anregung. Bitte legt los.
Code: Alles auswählen
def main():
# my code here
if __name__ == "__main__":
main()
Code: Alles auswählen
from StringIO import StringIO
import gzip
import os
import urllib2
import datetime
# base url
url = 'https://example.com/'
# Extension of the file name
url_suffix = '.csv.gz'
symbol = ['Alpha', 'Beta']
# Start date (Year, Month, Day)
start_dt = datetime.date(2015,1,4)
# End date (Year, Month, Day)
end_dt = datetime.date(2015,1,9)
# Find the week of the year for the start
start_wk = start_dt.isocalendar()[1]
# Find the week of the year for the end
end_wk = end_dt.isocalendar()[1]
# Pull out the year of the start
year = str(start_dt.isocalendar()[0])
# The URL is a combination of the symbol, year, and week of the year.
# https://example.com/{instrument}/{year}/{int of week of year}.csv.gz
# Example: https://example.com/symbol/2015/1.csv.gz for the first
# week of the year 2015.
# Beginn funktion 1 Vorbereiten der Verzeichnisse auf dem fremden Server
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))
# Ende Funktion 1. Bis hier läuft das Programm fehlerfrei
# Begin Funktion2 Herunterladen und Einfügen der csv.gzip Dateien in die richtigen Verzeichnisse
data_path = os.path.join("data", symbol, year)
print(data_path)
if not os.path.exists(data_path):
os.makedirs(data_path)
filename = url_data.split("/")[-1]
print(filename)
with open(filename, 'wb') as g:
data = g.read()