Portfolio Performance mit Python verbinden

Hallo zusamen,
ich habe bereits ein Performance Tool in python geschrieben:

  • lese die Transactions aus Excel ein
  • lese die Preise aus Excel ein
  • Berechne die Performance
  • Gebe eine csv Datei aus, welche die Portfolios und Performance zahlen in PowerBI visualisert

Ich habe mir jetzt das Projekt vorgenommen die Transactions sowie Preise aus der Portfolio Performance Datenbank zu „ziehen“. Nun Sind diese im xml file gespeichert was es nicht so einfach macht.

Einerseits würde ich mich über Interesse/Support seitens anderer Python Programmierer freuen, andererseits wollte ich einmal fragen ob Portfolio Performance nicht auch eine SQLITE datenbank anlegen könnte? Das würde das connecten von anderen Programmiersprachen m.E. wesentlich vereinfachen.

3 Like

Heyh @danielweb,

Du wirst vermutlich nicht darum herum kommen mit xml zu arbeiten.

Ich habe aber mal ein wenig Pseudocode geschrieben, bin kein Profi, daher wird es wohl nicht die beste Variante sein, aber du kannst nach den Daten suchen und sie in aus dem Array heraus weiterverarbeiten.

Die Daten, die du nicht brauchst, kannst du größtenteils mit dieser Zeile schon entfernen.

Ich habe hier mal mit Absicht keinen formatierten String genutzt.

results.append(str(child.tag) + str(child.attrib) + ":" + str(child.text))

Spiel mal damit herum und schau was passiert, dann musst du nur noch herausfinden wie der Tag, für die Daten die du, brauchst heißt.

Die Datengrundlage habe ich schamlos aus der Dokumentation genommen.
Link

Hoffe ich konnte dir soweit mit deinem Problem helfen.
Falls du noch Fragen hast, kann ich gern versuchen dir zu helfen.

Python 3.7:

import os
from xml.etree import ElementTree as ET

tree = ET.parse('Test.xml') 
root = tree.getroot()

def reader(root):
    results = [] # Variebale für die Ergebnisse
    for child in root: # loop durch alle Tags
        if (child.tag == "neighbor"): # prüft auf den richtigen Tag
            results.append(str(child.tag) + str(child.attrib) + ":" + str(child.text)) # Hängt den Tag samt Atribute und Text an
        try:
            results.extend(reader(child)) # Speichert die Ergebnisse
        except:
            pass 
    return (results) # Gibt die Ergebnisse zurück
        
        
print(reader(root)) # Gibt alle Ergebnisse aus.

Text.xml:

<?xml version="1.0"?>
<data>
    <country name="Liechtenstein">
        <rank>1</rank>
        <year>2008</year>
        <gdppc>141100</gdppc>
        <neighbor name="Austria" direction="E"/>
        <neighbor name="Switzerland" direction="W"/>
    </country>
    <country name="Singapore">
        <rank>4</rank>
        <year>2011</year>
        <gdppc>59900</gdppc>
        <neighbor name="Malaysia" direction="N"/>
    </country>
    <country name="Panama">
        <rank>68</rank>
        <year>2011</year>
        <gdppc>13600</gdppc>
        <neighbor name="Costa Rica" direction="W"/>
        <neighbor name="Colombia" direction="E"/>
    </country>
</data>
1 Like

@danielweb
Hat es geklappt?