与えられた例をエミュレートしようとしても、このスクリプトでsetResultsNameが動作するのに問題があります。私はドキュメントを見て、著者の本を調べ、フォーラムの例を見てきました。私はいくつかのバリエーションを試してきましたが、私は間違っています。コードのこの部分が何しようとしている何setResultsName属性のエラーが発生しました:「そのような属性はありません」
from pyparsing import *
lineId = Word(nums)
topicString = Word(alphanums+'-'+' '+"'")
expr = Forward()
full_entry = Group(lineId('responsenumber') + expr)
def new_line():
return '\n' + lineId.responsenumber # <-- here is the line that causes the error
expr << topicString + Optional(nestedExpr(content=delimitedList(expr))) + Optional((Literal(';').setParseAction(new_line) + expr))
for line in input:
inputParseResults = delimitedList(full_entry).parseString(line).asList()
print inputParseResults
は、この入力を取ることです。
1768 dummy data; things
27483 other things
そしてそれは、再関連付け、その後、セミコロンでラインを破る再びlineIdを添付し、していますそれあなたがこの行に見るように:
1768 dummy data
1768 things
27483 other things
私はここに示されていませんでした出力のフォーマット処理するために、他のコードがあります。私の主な障害は、ラインブレーク+ lineIdを取得している、と私はsetResultsNameを動作させることができたら、私は設定される可能性があります。
ありがとう、ポール。あなたのモジュールで私の歯を切って申し訳ありません。 提案する変更を行うと、\ nは表示されますが、lineIDは表示されません。あなたはちょうど私に手がかりを与えていましたか、今私は望みの結果を得るべきですか? –
ちょっと手掛かり - new_lineの始めにこの行を追加してください: 'print tokens.dump()' 'Group'のためにネストするレベルがあると思います。もしそうなら' tokens [0] .responsenumber'代わりに。実際には、あなたの文法は実際には複雑すぎるようですが、私は再帰的なForward定義の理由を見ません。 – PaulMcG
私がここに持っているサンプルデータは、文法が解析しなければならないものよりはるかに単純です。私は焦点を私が持っている問題になるようにここで簡略化しました。あなたは実際に私が最近尋ねた質問で文法を定式化するのを手助けしました:http://stackoverflow.com/questions/10234387/difficulty-of-this-particular-job-using-pyparsing-beginner 私はトークンを印刷します。 dump() 'それは私にセミコロンを与えるだけで、それが動作しているトークンを私に与えるなら意味があります。私が実際に望んでいたのは、元素の重量を使った化学式の例で行ったことを反映したものです。 –