Keine Heredocs in Python (oder?)

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.
Benutzeravatar
murphy
User
Beiträge: 60
Registriert: Samstag 30. Oktober 2004, 01:34
Wohnort: Berlin
Kontaktdaten:

Keine Heredocs in Python (oder?)

Beitragvon murphy » Dienstag 18. April 2006, 00:39

hallo Pythons!

Python fehlt das verwirrende feature der Heredocs, was völlig logisch ist, wenn man die designphilosophie bedenkt.

nun, ich vermute auch, dass die meisten fälle mit den '''-strings abgedeckt sind. aber eben sah ich mich außer stande, eine sehr einfache sache mit Python zum laufen zu bringen, und zwar:

  • ich habe mir die neueste version von PyYAML heruntergeladen und installiert. tolles projekt.
  • dann wollte ich die Reference Card von yaml.org ausprobieren - der veraltete Ruby-YAML-Parser schafft die nicht.
  • also probierte ich

    Code: Alles auswählen

    >>> import yaml
    >>> doc = '''
    und wollte dann einfach per Copy&Paste den code hineinkopieren. klappte nicht (weil ein ''' vorkommt.)
    auch mit triple-double-quotes kein erfolg.
also muss ich wohl eine datei einlesen. oder hat jemand eine bessere idee?

im vergleich dazu geht das in Ruby mit irb problemlos:[code=]irb(main):001:0> require 'yaml'
=> true
irb(main):008:0> refcard = <<'YAML'
[ reinkopieren ]
irb(main):071:0' YAML
=> "%YAML 1.1 # Reference card\n---\nCollection indicators:\n '? ' : Key indicator.\n usw.
irb(main):072:0> YAML.load(refcard)
=> "%YAML 1.1"[/code]dafür versteht der doofe YAML-parser nicht mal die YAML-Direktive ;)

bitte sagt mir, dass das in Python auch irgendwie geht. gibt es einen hack, um heredocs zu imitieren?
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Dienstag 18. April 2006, 02:39

Ich werd jetzt nicht über Pro- und Contra-Heredocs streiten, aber ich sag dir wie man die Reference Card einlesen kann:

Code: Alles auswählen

>>> ref = r"""[Strg+V/Rechtsklick in SSH-Fenster]
"""
>>> # done
>>> len(ref)
2569

Also, ich habe einen Tripple-Quote-String mit doppelten Anführungszeichen benutzt und zudem den als Raw-String deklariert. Warum letzteres? Weil Python sonst versucht, die \xXX-Codes in der Reference-Card zu parsen, aber da \xXX kein gültiger Wert ist, schlägt das fehl.
Als Raw-String ist es hingegen kein Problem.

Viel Spaß mit PyYAML, ich hoffe mal PyYAML 3000 ist besser als das phänomenal kaputte PyYAML, an welches ich mich erinnern kann :) (deswegen fand ich so toll, das Syck in Ruby 1.8 mitgeliefert wird).
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
murphy
User
Beiträge: 60
Registriert: Samstag 30. Oktober 2004, 01:34
Wohnort: Berlin
Kontaktdaten:

Beitragvon murphy » Mittwoch 19. April 2006, 16:30

achso, es gibt gar keinen unterschied zwischen ''' und """, aber ein r verhindert die interpretation. ok. danke!

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]