Leonidas hat geschrieben:Hallo kelvan, willkommen im Forum,
Ich finde die Inline-Kommentare sehr seltsam (sowas schreibt man über den zu kommentierenden Code nicht dahinter, wo der Editor es schon längst zwei Mal umgebrochen hat). Noch dazu solltestd du dringen alle ``global``-Aufrufe weglassen, ja besser sogar vergessen dass es ``global`` gibt (dafür gibt es ``return``). Die äußersten Klammern um die ``if``s würde man in Python weglassen.
Es wäre unter umständen auch praktisch die XML-Datei hereinpipen zu können und die Ausgabe dann auf Stdout bekommen.
Danke für die Antwort, Kommentare hab ich mal geändert, Klammern sind entfernt, bin gerade am umschreiben wegen output, der Variableninhalt bleibt erhalten wenn eine function mehrmals verwendet wird (in dem fall output), oder?
wie macht man es wenn man mehrere sachen returnen will?
sollte wahrscheinlich mit class/object/etc machen, nehme ich an, ala output.Artist.set()
wie meinst du das im letzten Absatz?
der inhalt wird nach stdout (außer ich hab da was durcheinander gebracht) ausgegeben und sollte per "> file" in eine datei geschrieben werden. (oder meisnt du was anderes)
Code: Alles auswählen
import sys
from lxml import etree
#import elementtree.ElementTree as etree
def walk_tree(node, level, output, key):
# Keys on Level4 are for a single Treck
if (node.tag == "key") and (level == 4):
# Save keyTag to allocate with next stringTag
key = node.text
# We are at the bitrateTag
if (node.tag == "integer") and (key == "Bit Rate") and (level == 4):
# Save Bit Rate
output[4] = node.text
#We are at a string tag
if (node.tag == "string") and (level == 4):
# Find out what kind of string
output[manage_output(key)] = node.text.encode( "utf-8" )
if (node.tag == "dict") and (level == 3):
print """,output[0],"";"",output[1],"";"",output[2],"";"",output[3],"";"",output[4],"""
for i in range(0,4):
output[i] = ""
children = node.getchildren()
for child in children:
walk_tree(child, level + 1,output, key)
def manage_output(out_type):
#out=lambda *x:sys.stdout.write(" ".join(map(str,x)))
if out_type == "Name":
return 0
if out_type == "Artist":
return 1
if out_type == "Album":
return 2
if out_type == "Genre":
return 3
def test(inFileName):
doc = etree.parse(inFileName)
root = doc.getroot()
#global output
output = ["Name","Artist","Album","Genre","Bit Rate[kbit/s]"]
key = ""
walk_tree(root, 0, output, key)
def main():
args = sys.argv[1:]
if len(args) != 1:
print 'usage: python test.py infile.xml'
sys.exit(-1)
test(args[0])
if __name__ == '__main__':
main()
Wo hab ich einen Fehler gemacht manage_output(key) gibt mir immer einen NoneType zurück

Scheinbar wird key nicht übergeben :/
mfg,
Kelvan
PS: Wie kann ich Text im Terminal ausgeben der nicht durch "> file" ins file geschrieben wird?