Löschen eines Verzeichnisses erzwingen

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.
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.
BastiL
User
Beiträge: 135
Registriert: Montag 7. Juli 2008, 20:22

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
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.
BastiL
User
Beiträge: 135
Registriert: Montag 7. Juli 2008, 20:22

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?
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.
BastiL
User
Beiträge: 135
Registriert: Montag 7. Juli 2008, 20:22

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
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.
Antworten