2012-02-06 11 views
13

मेरे पास एक LaTeX फ़ाइल है जिसे मैं पाइथन 3 के साथ पढ़ना चाहता हूं और परिणामी स्ट्रिंग में मान को प्रारूपित करना चाहता हूं। की तरह कुछ:उस स्ट्रिंग को प्रारूपित करें जिसमें

... 
\textbf{REPLACE VALUE HERE} 
... 

लेकिन मैं कैसे स्ट्रिंग स्वरूपण करने के नए रास्ते के बाद से यह करने के लिए यह पता लगाने की नहीं कर पाए हैं {val} संकेतन का उपयोग करता है और क्योंकि यह एक LaTeX दस्तावेज है, वहाँ अतिरिक्त {} पात्रों की टन कर रहे हैं।

मैं की तरह कुछ की कोशिश की है:

'\textbf{This and that} plus \textbf{{val}}'.format(val='6') 

लेकिन मैं मिल

KeyError: 'This and that' 

उत्तर

20

विधि 1, जो है जो मैं चाहता हूँ वास्तव में है: एक string.Template बजाय का उपयोग करें।

>>> from string import Template 
>>> Template(r'\textbf{This and that} plus \textbf{$val}').substitute(val='6') 
'\\textbf{This and that} plus \\textbf{6}' 

विधि 2: अतिरिक्त ब्रेसिज़ जोड़ें। एक regexp का उपयोग कर यह कर सकता है।

>>> r'\textbf{This and that} plus \textbf{val}'.format(val='6') 
Traceback (most recent call last): 
    File "<interactive input>", line 1, in <module> 
KeyError: 'This and that' 
>>> r'\textbf{{This and that}} plus \textbf{{{val}}}'.format(val='6') 
'\\textbf{This and that} plus \\textbf{6}' 

(संभव) विधि 3: कस्टम स्ट्रिंग का उपयोग करें। फ़ॉर्मेटर। मेरे पास ऐसा करने का कारण नहीं है इसलिए मुझे उपयोगी होने के लिए पर्याप्त जानकारी नहीं है।

+0

कोई सुराग चाहे स्ट्रिंग। भविष्य में टेम्पलेट को बहिष्कृत किया जाएगा? नया पायथन 3 {} स्वरूपण में यह शामिल है। लाटेक्स संपादन के लिए हालांकि टेम्पलेट्स अधिक सुविधाजनक हैं। – levesque

+0

@levesque: ठीक है, इसे 3.4 लंबित (लंबित) के रूप में बहिष्कृत नहीं किया गया है, और यह '{}' स्वरूपण से अलग कार्यक्षमता प्रदान करता है, इसलिए मुझे लगता है कि यह थोड़ी देर तक टिकेगा। – DSM

+0

रेगेक्स का उपयोग करने के बजाय अतिरिक्त ब्रेसिज़ जोड़ने के लिए संभावित रूप से अच्छा तरीका 'str.translate' के साथ है। 'unformatter = str.maketrans ({'{': '{{', '}': '}}'}) ', फिर किसी दिए गए स्ट्रिंग को ठीक करने के लिए,' goodstring = badstring.translate (unformatter)' (नोट: द प्रश्न 2.x पर पायथन 3.x के बारे में है, यह केवल 'यूनिकोड' के साथ काम करेगा, न कि 'str', क्योंकि केवल' यूनिकोड '1-n अनुवाद मैपिंग का समर्थन करता है।) – ShadowRanger

संबंधित मुद्दे