मैं पाइपरिंग (और पाइथन के लिए बिल्कुल नया) में नया हूं। मैंने अपनी समस्या को सबसे सरल रूप में कम करने की कोशिश की है जो बताएगा कि क्या गलत हो रहा है (उस बिंदु पर जहां मुझे शायद पाइपर्सिंग की आवश्यकता नहीं होगी!)पाइपर्सिंग न्यूबी सेटपर्सएक्शन टॉकेन्स को संशोधित करना
मान लीजिए कि मेरे पास अक्षरों और संख्याएं शामिल हैं , जैसे "बी 7 जे 4 ए 2 डी सी 3"। हमेशा एक पत्र होता है, लेकिन संख्या वैकल्पिक है। मैं इसे अपने व्यक्तिगत तत्वों में पार्स करना चाहता हूं, और फिर उन्हें संसाधित करना चाहता हूं, लेकिन जहां कोई नंगे अक्षर है, बिना किसी संख्या के, इसे बदलने के लिए आसान होगा ताकि उसके बाद "डिफ़ॉल्ट" नंबर 1 हो। तब मैं हर तत्व को लगातार तरीके से संसाधित कर सकता था। मैंने सोचा कि मैं एक setparseAction के साथ ऐसा कर सकता है, इस प्रकार है:
from pyparsing import *
teststring = "a2 b5 c9 d e z"
expected_letter = Word("ABCDEFGabcdefgzZxy", exact=1)
expected_number = Word(nums)
letter_and_number = expected_letter + expected_number
bare_letter = expected_letter
bare_letter.setParseAction(lambda s,l,t: t.append("1"))
elements = letter_and_number | bare_letter
line = OneOrMore(elements)
print line.parseString(teststring)
दुर्भाग्य से, t.append() मैं क्या उम्मीद कर रहा हूँ, एक "1" की सूची में जोड़ने के लिए किया गया था जो ऐसा नहीं करता है पार्सड टोकन इसके बजाय, मुझे एक त्रुटि मिलती है: TypeError: 'str' ऑब्जेक्ट कॉल करने योग्य नहीं है।
शायद मैं वास्तव में वास्तव में मोटा होना चाहता हूं, लेकिन आप में से एक विशेषज्ञ कृपया मुझे सीधे सेट कर सकता है।
धन्यवाद
स्टीव
आह हाँ, यह अब सही समझ में आता है! जब मैंने पार्स परिणामों को मुद्रित किया, तो वे एक सामान्य सूची की तरह लग रहे थे, इसलिए मैंने सोचा कि मैं सामान्य तरीके से जोड़ सकता हूं। इसके अलावा मैं इस तथ्य को याद कर चुका था कि वैकल्पिक एक डिफ़ॉल्ट सेटिंग की अनुमति देता है, जो एक स्वच्छ समग्र समाधान प्रदान करता है।और यह मेरे वास्तविक कार्यक्रम पर लागू होगा, जो यहां स्ट्रिप-डाउन संस्करण की तुलना में थोड़ा अधिक जटिल है। आपकी मदद के लिए बहुत धन्यवाद .... और खुद पाइपर्सिंग के लिए! स्टीव। –