Seite 2 von 2

Re: Löschen eines Verzeichnisses erzwingen

Verfasst: Freitag 14. September 2012, 09:03
von BlackJack
So könnte man das machen:

Code: Alles auswählen

#!/usr/bin/env python
import csv
import httplib
from datetime import date as Date, datetime as DateTime
from itertools import count
from urllib import urlencode, urlopen

STOCK_PRICE_URL = 'http://www.comdirect.de/inf/kursdaten/historic.csv'


def convert_float(string):
    return float(string.replace('.', '').replace(',', '.'))


def get_stock_price_data(
    trading_id, start_date, end_date, with_earnings=True, interval=16
):
    if start_date > end_date:
        raise ValueError('start (%s) > end (%s)' % (start_date, end_date))
    
    result = list()
    for offset in count():
        csv_file = urlopen(
            STOCK_PRICE_URL,
            urlencode(
                [
                    (
                        'DATETIME_TZ_START_RANGE_FORMATED',
                        start_date.strftime('%d.%m.%Y')
                    ),
                    ('ID_NOTATION', str(trading_id)),
                    ('INTERVALL', str(interval)),
                    ('OFFSET', str(offset)),
                    (
                        'DATETIME_TZ_END_RANGE_FORMATED',
                        end_date.strftime('%d.%m.%Y')
                    ),
                    ('WITH_EARNINGS', str(with_earnings).lower())
                ]
            )
        )
        try:
            if csv_file.getcode() != httplib.OK:
                break
            
            result.extend(
                [
                    DateTime.combine(
                        DateTime.strptime(row[0], '%d.%m.%Y'),
                        DateTime.strptime(row[1], '%H:%M').time()
                    )
                ] + map(convert_float, row[2:])
                for row in csv.reader(csv_file, delimiter=';')
                if len(row) > 1 and row[0] != 'Datum'
            )
        finally:
            csv_file.close()
    
    return result


def main():
    stock_price_data = get_stock_price_data(
        11050544, Date(2012, 1, 1), Date(2012, 1, 8)
    )
    print stock_price_data


if __name__ == '__main__':
    main()
Bei dem Datum habe ich mir nicht näher angeschaut was Du da gemacht hast, sondern habe einfach Datum+Zeit-Objekte in das Ergebnis gepackt, mit denen man weiter arbeiten könnte.

Re: Löschen eines Verzeichnisses erzwingen

Verfasst: Samstag 22. September 2012, 15:53
von BastiL
Danke BlackJack da habe ich wirklich viel aus deinem Beispiel gelernt. Ich habe mir das gerade mal näher angesehen.

Ich verstehe nicht, woher row[0] plötzlich kommt? Ich denke du hast das iterieren über das csv-File vergessen, oder?

Grüße BastiL

Re: Löschen eines Verzeichnisses erzwingen

Verfasst: Samstag 22. September 2012, 16:05
von BlackJack
@BastiL: Das kommt vom ``for row in csv.reader(…``, wenn wir von dem selben ``row[0]`` reden. Das Argument von `extend()` ist ein Generatorausdruck.

Re: Löschen eines Verzeichnisses erzwingen

Verfasst: Samstag 22. September 2012, 17:01
von BastiL
Danke jetzt sehe ich es ...

Wo wir gerade dabei sind: Warum funktioniert das Zusammenfügen der url für urlopen() so? Urlopen erwartet ein Argument, das ist wohl ein String der hier per Komma zusammengesetzt ist? Aber warum wird das nicht als zwei Argumente interpretiert?

Re: Löschen eines Verzeichnisses erzwingen

Verfasst: Samstag 22. September 2012, 18:47
von BlackJack
@BastiL: Da funktioniert so weil `urlopen()` so programmiert ist. Was auch dokumentiert sein sollte. Und da wird nichts mit einem Komma zusammen gesetzt — das *sind* zwei Argumente.

Re: Löschen eines Verzeichnisses erzwingen

Verfasst: Sonntag 23. September 2012, 13:21
von BastiL
BlackJack hat geschrieben:@BastiL: Da funktioniert so weil `urlopen()` so programmiert ist. Was auch dokumentiert sein sollte. Und da wird nichts mit einem Komma zusammen gesetzt — das *sind* zwei Argumente.
Das erschließt sich mir aus der Doku nicht wirklich:

http://docs.python.org/library/urllib.html

Re: Löschen eines Verzeichnisses erzwingen

Verfasst: Sonntag 23. September 2012, 14:44
von BlackJack
@BastiL: Das steht da aber. Erstes Argument ist `url`, zweites ist `data`, drittes `proxies`. Die beiden letzten sind optional. Und in der Erklärung darunter steht was die Argumente bedeuten.