2009-07-22 8 views
10

पायथन के textwrap पुस्तकालय का उपयोग कर, कैसे मैं इस बारी कर सकते हैं: इस मेंपायथन टेक्स्टव्रैप लाइब्रेरी - लाइन ब्रेक को कैसे संरक्षित करें?

short line, 

long line xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 

:

short line, 

long line xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 
xxxxxxxxxxxxxxxxxxx 

मैंने कोशिश की:

w = textwrap.TextWrapper(width=90,break_long_words=False) 
body = '\n'.join(w.wrap(body)) 

लेकिन मैं मिलता है:

short line, long line xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 

(मेरे उदाहरणों में सटीक अंतर नहीं है)

उत्तर

13

कोशिश

w = textwrap.TextWrapper(width=90,break_long_words=False,replace_whitespace=False) 

कि (मैं पहले textwrap उपयोग नहीं किया है

मुझे लगता है कि बाहर काम मेरे लिए समस्या को ठीक करने मैं क्या here पढ़ा से लग रहा था)

+3

खबरदार कि इस मामले में रैपर चरित्र के रूप में \ n मानता है और लाइन ब्रेकर के रूप में नहीं, उदाहरण के लिए यह मान लेगा कि पहले \ n प्रकाशित एक शब्द है। यह कई मामलों में स्वरूपण समस्याओं का कारण बनता है। तो उपयोगकर्ता "दूर" द्वारा दिए गए "\ n" .join() के साथ समाधान बेहतर है। – Zulko

3

केवल 9 अक्षरों के बाद लाइनों को लपेटने के बारे में कैसे?

new_body = "" 
lines = body.split("\n") 

for line in lines: 
    if len(line) > 90: 
     w = textwrap.TextWrapper(width=90, break_long_words=False) 
     line = '\n'.join(w.wrap(line)) 

    new_body += line + "\n" 
1

ऐसा लगता है कि यह इसका समर्थन नहीं करता है। इस कोड को यह विस्तार क्या मैं हालांकि जरूरत है ऐसा करने के लिए होगा:

http://code.activestate.com/recipes/358228/

0
lines = text.split("\n") 
lists = (textwrap.TextWrapper(width=90,break_long_words=False).wrap(line) for line in lines) 
body = "\n".join("\n".join(list) for list in lists) 
8
body = '\n'.join(['\n'.join(textwrap.wrap(line, 90, 
       break_long_words=False, replace_whitespace=False)) 
       for line in body.splitlines() if line.strip() != '']) 
0

मैं एक ऐसी ही समस्या गतिशील रूप से उत्पन्न docstrings स्वरूपण करना पड़ा। मैं और हाथ से रखी गई नई लाइनों को एक निश्चित लंबाई में विभाजित करना चाहता था। उत्तर को @far थोड़ा सा जवाब देकर, यह समाधान मेरे लिए काम करता था। मैं केवल इसे यहां पोस्टरिटी के लिए शामिल करता हूं:

import textwrap 

wrapArgs = {'width': 90, 'break_long_words': True, 'replace_whitespace': False} 
fold = lambda line, wrapArgs: textwrap.fill(line, **wrapArgs) 
body = '\n'.join([fold(line, wrapArgs) for line in body.splitlines()]) 
0

टेक्स्टवापर को टेक्स्ट को संभालने के लिए डिज़ाइन नहीं किया गया है जिसमें पहले से ही इसमें नई लाइनें हैं।

1) वर्ष नई-पंक्तियों रखें, और केवल लाइनों है कि सीमा से अधिक कर रहे हैं लपेट:

वहाँ एक दो चीजें आप जब अपने दस्तावेज़ पहले से ही नई-पंक्तियों है क्या करना चाहते हो सकता है।

आप TextWrapper उपवर्ग कर सकते हैं इस प्रकार है:

d = DocumentWrapper(width=90) 
wrapped_str = d.fill(original_str) 

आप देता है::

class DocumentWrapper(textwrap.TextWrapper): 

    def wrap(self, text): 
     split_text = text.split('\n') 
     lines = [line for para in split_text for line in textwrap.TextWrapper.wrap(self, para)] 
     return lines 

फिर textwrap के रूप में एक ही तरह से इसका इस्तेमाल

short line, 
long line xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 
xxxxxxxxxxxxxxxxxxxxxxxxxxx 

2) निकालें पुरानी न्यूलाइन और सब कुछ लपेटो।

original_str.replace('\n', '') 
wrapped_str = textwrap.fill(original_str, width=90) 

आप देता है

short line, long line xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 

(TextWrapper इनमें से किसी भी नहीं करता है - यह सिर्फ मौजूदा नई-पंक्तियों पर ध्यान नहीं देता है, जो एक अजीब तरह से स्वरूपित परिणाम की ओर जाता है)

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