Anfänger 3er Tag mit Python Listendurchlauf Datei erstellen

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.
Antworten
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

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
           
Zuletzt geändert von sea-live am Donnerstag 21. Februar 2008, 20:02, insgesamt 1-mal geändert.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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)
...
schlangenbeschwörer
User
Beiträge: 419
Registriert: Sonntag 3. September 2006, 15:11
Wohnort: in den weiten von NRW
Kontaktdaten:

Rechtschreibung würde auch schon helfen.
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

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()

BlackJack

Wobei man statt eines Dictionaries auch wirklich eine Liste mit den Listen, statt der Namen als Zeichenketten machen könnte. Spart Tipparbeit.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Wie meinst Du das genau? (Mal ganz davon abgesehen, dass da eh ne Menge Tipparbeit drin steckt :D )
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.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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 :)
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

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
Antworten