Seite 1 von 1

Anfänger 3er Tag mit Python Listendurchlauf Datei erstellen

Verfasst: Donnerstag 21. Februar 2008, 19:20
von sea-live
Servus
Begeistet von Python
klappt alle auser das mit dem FOR das will bei mir nicht hinhauen

ich hab mir mit wx ein GUI erstellt das verzeichnisse anlegt und daten reinkopieren soll

Verzeichniss anlegen klappt auch klasse aber die erastellung der daten dateien klappt nicht
zeile 69-73 Forschleife

Bitte um Hilfe

da liegt sicherlich ein grober schnitzer drinn
PS(ich hab studiert) deswegen die Dümmlichen Fragen

Code: Alles auswählen

loesung unten der hier war Falsch
           

Verfasst: Donnerstag 21. Februar 2008, 19:32
von Hyperion
Hallo,

ich verstehe zwar nicht so ganz, was Du machen willst, ahne es aber. Folgende Zeile ist Dein Problem:

Code: Alles auswählen

symbollilsten=['tecdax','mdax','cdax','sdax','dax30']
Du legst hier eine Liste von Strings an und glaubst, dass Du damit auf die Inhalte der Listen zugreifen kannst, die sich hinter den Namen verbergen! Das geht so natürlich nicht!
'tecdax' ist natürlich ein String, keine Referenz auf die Liste namens tecdax.

Ich würde zu einem Dictionary raten:

Code: Alles auswählen

symbole = {'tecdax':tecdax, 'mdax':mdax, ...}
for key, value in symbole.iteritems():
    out = open("..." % key, "w")
    for item in value:
        out.write(item)
...

Verfasst: Donnerstag 21. Februar 2008, 19:35
von schlangenbeschwörer
Rechtschreibung würde auch schon helfen.

Verfasst: Donnerstag 21. Februar 2008, 19:52
von sea-live
DANKE
das Wars
Für einen Programmier anfänger finde ich das am 3ten Tag
garnicht übel

GUI Böersendaten einlesen schnipsel

morgen Tag 4
Vorgabe intern
jahr_von, monat_von, tag_von = (2008, 0, 1)
jahr_bis, monat_bis, tag_bis = (2008, 1, 15)

Zwei Eingabe Felder die den Zeitraum der WEB_Abfrage steuern.
Gramatik ist nicht meine Stärke!!

Code: Alles auswählen

# -*- coding: cp1252 -*-
#----------------------------------------------------------------------
# Frame Programm zum einlesen der Boersenlisten
# wx.StaticText, wx.Button, and a wx.BoxSizer, but it shows the basic
# structure of any wxPython application.
#----------------------------------------------------------------------

import wx
import os
import types
import csv
import urllib
#globale variablen

class MyFrame(wx.Frame):
    """
    This is MyFrame.  It just shows a few controls on a wxPanel,
    and has a simple menu.
    """
    def __init__(self, parent, title):
        wx.Frame.__init__(self, parent, -1, title,
                          pos=(250, 150), size=(450, 350))

        # Create the menubar
        menuBar = wx.MenuBar()

        # and a menu 
        menu = wx.Menu()

        # add an item to the menu, using \tKeyName automatically
        # creates an accelerator, the third param is some help text
        # that will show up in the statusbar
        menu.Append(wx.ID_EXIT, "E&xit\tAlt-X", "Exit this simple sample")

        # bind the menu event to an event handler
        self.Bind(wx.EVT_MENU, self.OnTimeToClose, id=wx.ID_EXIT)

        # and put the menu on the menubar
        menuBar.Append(menu, "&File")
        self.SetMenuBar(menuBar)

        self.CreateStatusBar()
        

        # Now create the Panel to put the other controls on.
        panel = wx.Panel(self)

        # and a few controls
        text = wx.StaticText(panel, -1, "Boersen Daten einlesen \n von Yahoo-Finance!")
        text.SetFont(wx.Font(14, wx.SWISS, wx.NORMAL, wx.BOLD))
        text.SetSize(text.GetBestSize())
        btn = wx.Button(panel, -1, "Close")
        but_tecdax_einlesen = wx.Button(panel, -1, "TECDax Einlesen")
        but_einlesen = wx.Button(panel, -1, "Einlesen von Daten")

        # bind the button events to handlers
        self.Bind(wx.EVT_BUTTON, self.OnTimeToClose, btn)
        self.Bind(wx.EVT_BUTTON, self.OnTecdaxButton, but_tecdax_einlesen)
        self.Bind(wx.EVT_BUTTON, self.OnFunButton, but_einlesen)

        # Use a sizer to layout the controls, stacked vertically and with
        # a 10 pixel border around each
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(text, 0, wx.ALL, 10)
        sizer.Add(btn, 0, wx.ALL, 10)
        sizer.Add(but_tecdax_einlesen, 0, wx.ALL, 10)
        sizer.Add(but_einlesen, 0, wx.ALL, 10)
        panel.SetSizer(sizer)
        panel.Layout()
        
    def Verzeichnissbaum(self):
        if os.path.exists('C:\\boerse'):
          print 'Verzeichnisse sind da'
        else:
          os.mkdir('C:\\boerse')
          os.mkdir('C:\\boerse\\tecdax\\')
          os.mkdir('C:\\boerse\\mdax\\')
          os.mkdir('C:\\boerse\\cdax\\')
          os.mkdir('C:\\boerse\\sdax\\')
          os.mkdir('C:\\boerse\\dax30\\')
          os.mkdir('C:\\boerse\\symbole\\')
          print 'Verzeichnisse erstellt'
          # Symbollisten erstellen
          print 'Symbollisten werden erstellt'
          tecdax = ['MOR.DE','IDS.DE','GPC.DE','FNT.DE','ES6.DE','DRW3.DE',
                  'EPC.DE','CGY.DE','BC8.DE','BBZ.DE','AUS.DE','AIX.DE',
                  'AFX.DE','KBC.DE','ADV.DE','MTH.DE','NDX1.DE','PFV.DE',
                  'QCE.DE','QIA.DE','QSC.DE','RSI.DE','SNG.DE','SOW.DE',
                  'SWV.DE','TA6.DE','UTDI.DE','VTW.DE','WDI.DE']
          mdax=['CLS1.DE','ALT.DE','AMB2.DE','AQU.DE','ARL.DE','ARO.DE',
                'AWD.DE','BOS3.DE','BEI.DE','DEQ.DE','DOU.DE','EAD.DE',
                'FRA.DE','FRE3.DE','G1A.DE','GBF.DE','GFJ.DE','HDD.DE',
                'DEZ.DE','HEI.DE','HNR1.DE','IKB.DE','HOT.DE','IVG.DE',
                'IWK.DE','KCO.DE','KRN.DE','LEO.DE','LXS.DE','MLP.DE',
                'MTX.DE','NDA.DE','PFD4.DE','PRA.DE','PRE.DE','PUM.DE',
                'PSM.DE','RHK.DE','RHM.DE','SAZ.DE','SDF.DE','SGL.DE',
                'SY1.DE','SZG.DE','SZU.DE','TGM.DE','TNH.DE','VOS.DE',
                'WCH.DE','WIN.DE']
          cdax=['IUR.DE','PIT.DE','HUL.DE','SIM.DE','MNV6.DE','RIN7.DE',
                'TBB.DE','LEC.DE','MAF.DE','VGT.DE','YMOS','YMO.DE','SFP1.DE',
                'DKA.DE','VMR.DE','STR.DE','BMO.DE','GARY.DE','COD.DE',
                'MOE.DE','AUT.DE','SIN.DE','EIS.DE','SHF.DE','MAU.DE',
                'BLAG.DE','BLN.DE','BJU.DE','MPR.DE','OAR.DE','FRO.DE',
                'PKB.DE','T1C.DE','UUU.DE','VSC.DE','AAA.DE','ACV.DE',
                'AGV.DE','AHH.DE','AAH3.DE','LUM.DE','RBX.DE','NIE.DE',
                'AQU.DE','ACW.DE','AWD.DE','AX33.DE','ARL.DE','ABO.DE',
                'RSB.DE','HNG.DE','LKI.DE','ADC.DE','ADS.DE','ADL.DE',
                'AAH.DE','ADJ.DE','ADV.DE','DVN1.DE','AP8.DE','AGI.DE',
                'DOO.DE','ARE.DE','AIX.DE','ALG.DE','AS1.DE','ABX.DE',
                'AEI.DE','ALV.DE','ANO.DE','ATF.DE','AL4.DE','ALT.DE',
                'TXA.DE','AAD.DE','AMB2.DE','AJA.DE','ANZ.DE','A3E.DE',
                'AHZ.DE','AR5.DE','AYD.DE','HHS.DE','ARX.DE','AOF.DE',
                'NSU.DE','ABE1.DE','AX3.DE','ACG.DE','BM9A.DE','BYW6.DE',
                'BKS3.DE','BIO.DE','BKQ.DE','BMW3.DE','BWB.DE','BBX.DE',
                'BBX.DE','BTT.DE','BAD.DE','BAS.DE','BSL.DE','BVH.DE',
                'B5A.DE','BAY.DE','SCH.DE','HVM.DE','BYW.DE','USE.DE',
                'BC8.DE','BEI.DE','BEZ3.DE','BHH.DE','BFV.DE','MBH3.DE',
                'BDT.DE','BZL.DE','BSS.DE','BSK.DE','BIE.DE','BIJ.DE',
                'GBF.DE','BNT.DE','BIT.DE','BIB.DE','BIO3.DE','BIO3.DE',
                'BMW.DE','BVB.DE','BMM.DE','AFX.DE','C3O.DE','MXC.DE',
                'COM.DE','CBK.DE','CAG.DE','CGY.DE','CON.DE','DSJ.DE',
                'DYK.DE','DRN.DE','DCX.DE','D9C.DE','DBK.DE','DB1.DE',
                'DPW.DE','DPB.DE','DTE.DE']
          sdax=['AB1.DE','B5A.DE','AOX.DE','BAD.DE','BHS.DE','BYW6.DE','COM.DE',
                'D9C.DE','DAZ.DE','DBA.DE','DSJ.DE','DUE.DE','DWNI.DE','DYK3.DE',
                'EEX.DE','ESC.DE','EV4.DE','FIE.DE','EVD.DE','FPE3.DE','GFK.DE',
                'GIL.DE','GLJ.DE','GMM.DE','GWI1.DE','GXI.DE','HG1.DE','HXCI.DE',
                'INH.DE','IYP.DE','JUN3.DE','KBU.DE','KWS.DE','MDN.DE','MPC.DE',
                'MVV1.DE','O2C.DE','P1Z.DE','RAA.DE','SGS.DE','SIX2.DE','SKB.DE',
                'SPR.DE','T3C.DE','TEG.DE','TTK.DE','VIA.DE','WAC.DE','WAS.DE',
                'ZIL2.DE']
          dax30=['ADS.DE','ALV.DE','BAS.DE','BAY.DE','BMW.DE','CBK.DE',
                 'DAI.DE','DB1.DE','DBK.DE','DPB.DE','DPW.DE','DTE.DE',
                 'EOA.DE','FME.DE','HEN3.DE','HRX.DE','IFX.DE','LHA.DE',
                 'LIN.DE','MUV2.DE','MAN.DE','MEO.DE','MRK.DE','RWE.DE',
                 'SIE.DE','TKA.DE','TUI1.DE','VOW.DE','SAP.DE']
          symbollisten = {'tecdax':tecdax, 'mdax':mdax,'cdax':cdax,'sdax':sdax,'dax30':dax30}
          for key, value in symbollisten.iteritems():
              out_file = open("C:\\boerse\\symbole\\%s.txt" % key, "w")
              for item in value:
                out_file.write(item +'\n') 
              out_file.close()
          
          print 'Symbollisten erstellt'
                    
    def OnTimeToClose(self, evt):
        """Event handler for the button click."""
        print "See ya later!"
        self.Close()

    def OnTecdaxButton(self, evt):
        symbol_liste={}
        Monatvon="00"
        Tagvon="25"
        Jahrvon="2008"
        Monatbis="01"
        Tagbis="18"
        Jahrbis="2008"
        print 'Lese Symbolliste'
        #überprüfe verzeichnissbaum
        self.Verzeichnissbaum()
        in_file = open("C:\\boerse\\symbole\\tecdax.txt", "r")
        x=0
        while True:
            in_line = in_file.readline()
            if not in_line:
                break
            in_line = in_line[:-1]
            symbol_liste[x] = in_line
            x=x+1   
        in_file.close()
        print "eingelesen"
        x=0
        print 'erstelle csv Dateien'
        while x < len(symbol_liste):
            url=("http://ichart.yahoo.com/table.csv?s=%s&a=%s&b=%s&c=%s&d=%s&e=%s&f=%s&g=d&ignore=.csv" %(symbol_liste[x],Monatvon,Tagvon,Jahrvon,Monatbis,Tagbis,Jahrbis))
            print url
            req = urllib.urlopen(url)
           
            f = file("C:\\boerse\\tecdax\\%s.csv"%(symbol_liste[x]), 'w')
            f.write(req.read())
            f.close()
            req.close()
            print symbol_liste[x],' erledigt'
            x=x+1
        print 'Dateien aus Internet erstellt' 

    def OnFunButton(self, evt):
        """Event handler for the button click."""
        print "Having fun yet?"


class MyApp(wx.App):
    def OnInit(self):
        frame = MyFrame(None, "Boersen-Analyse Tool Sammel Lothar 2008")
        self.SetTopWindow(frame)

        print "Hier gibt es die Laufzeit Statusmeldungen"
        print
        print 'Standard gehen die Dateien nach '
        print 'C:\\boerse\\'
        print 'in die jeweiligen Unterverzeichnisse'
        print 'tecdax , mdax , cdax ,sdax ,symbole '
        print
        print 'dateien werden eingelesen als csv'

        frame.Show(True)
        return True
    
app = MyApp(redirect=True)
#Ausgabe()
app.MainLoop()


Verfasst: Donnerstag 21. Februar 2008, 21:36
von BlackJack
Wobei man statt eines Dictionaries auch wirklich eine Liste mit den Listen, statt der Namen als Zeichenketten machen könnte. Spart Tipparbeit.

Verfasst: Donnerstag 21. Februar 2008, 21:43
von Hyperion
Wie meinst Du das genau? (Mal ganz davon abgesehen, dass da eh ne Menge Tipparbeit drin steckt :D )

Verfasst: Donnerstag 21. Februar 2008, 21:52
von BlackJack
Genau meine ich:

Code: Alles auswählen

symbollisten = [tecdax, mdax, cdax, sdax, dax30]
Allerdings sollte man vielleicht überlegen so etwas in Datendateien aus zu lagern. Ist ja nicht so, dass sich diese Daten nicht im Laufe der Zeit verändern.

Verfasst: Donnerstag 21. Februar 2008, 21:55
von Hyperion
Ach so ... das dachte ich auch zuerst. Aber dann fehlen ja die Namen als Strings für die verschiedenen Dateien, die er anlegen möchte. Daher hab ich zum dict geraten :)

Verfasst: Freitag 22. Februar 2008, 10:55
von sea-live
BlackJack hat geschrieben:Genau meine ich:

Code: Alles auswählen

symbollisten = [tecdax, mdax, cdax, sdax, dax30]
Allerdings sollte man vielleicht überlegen so etwas in Datendateien aus zu lagern. Ist ja nicht so, dass sich diese Daten nicht im Laufe der Zeit verändern.
wie immer hat BlackJack den kern der sache erfasst
ziel des ganzen premborium ist mittels verzeichnissbaum Dateien zuerstellen die dann editierbar sind um später dann änderungen vorzunehmen

nach der erstellung der dateien wird nur mit disen gearbeitet und nicht mit den listen oder dictionäries !!!!

es folgt programmiertag 4 eines Anfängers man hat mir als basic(Bascom-AVR)mensch gesagt das python eine OOPS ist
und ich mit objekt_programmiersprachen irgendwie auf kriegsfuß stehe.

DAS wird schon werden
Danke an alle die mir bisher und auch weiterhin mit rat und tat zurseite stehen.

Ps die listen stammen nicht aus tiparbeit sondern aus excel-viaMLDownloader