بسته بندی، کوتاه کردن، و قالب بندی رشته ها در پایتون با textwrap

کسب و کار

برای قالب بندی یک رشته در پایتون با بسته بندی (شکستن خط) و کوتاه کردن (مخفف کردن) آن در تعداد دلخواه از کاراکترها، از ماژول textwrap کتابخانه استاندارد استفاده کنید.

اطلاعات زیر در اینجا ارائه شده است.

  • پیچیدن یک رشته (فید خط):wrap()،fill()
  • رشته های کوتاه (حذف شده):shorten()
  • شی TextWrapper

اگر می خواهید رشته های طولانی را به جای در خروجی روی چندین خط در کد بنویسید، به مقاله زیر مراجعه کنید.

پیچیدن یک رشته (فید خط):wrap()،fill()

با تابع wrap() ماژول textwrap، می‌توانید فهرستی را به دست آورید که بر اساس شکسته‌های کلمه تقسیم می‌شود تا در تعداد دلخواه کاراکتر قرار گیرد.

تعداد کاراکترها را برای عرض آرگومان دوم مشخص کنید. پیش فرض عرض=70 است.

import textwrap

s = "Python can be easy to pick up whether you're a first time programmer or you're experienced with other languages"

s_wrap_list = textwrap.wrap(s, 40)
print(s_wrap_list)
# ['Python can be easy to pick up whether', "you're a first time programmer or you're", 'experienced with other languages']

با استفاده از لیست به دست آمده می توانید رشته ای را دریافت کنید که با یک کد خط جدید شکسته شده است
\n'.join(list)

print('\n'.join(s_wrap_list))
# Python can be easy to pick up whether
# you're a first time programmer or you're
# experienced with other languages

تابع fill() یک رشته خط جدید را به جای لیست برمی گرداند. مانند اجرای کد زیر بعد از wrap() مانند مثال بالا است.
\n'.join(list)

این کار زمانی راحت‌تر است که به لیستی نیاز ندارید اما می‌خواهید یک رشته با عرض ثابت را به یک ترمینال و غیره خروجی دهید.

print(textwrap.fill(s, 40))
# Python can be easy to pick up whether
# you're a first time programmer or you're
# experienced with other languages

اگر آرگومان max_line مشخص شده باشد، تعداد خطوط بعد از آن حذف می شود.

print(textwrap.wrap(s, 40, max_lines=2))
# ['Python can be easy to pick up whether', "you're a first time programmer or [...]"]

print(textwrap.fill(s, 40, max_lines=2))
# Python can be easy to pick up whether
# you're a first time programmer or [...]

در صورت حذف، رشته زیر به صورت پیش فرض در انتها خروجی خواهد شد.
[...]'

می توان آن را با هر رشته ای با مکان نگهدار آرگومان جایگزین کرد.

print(textwrap.fill(s, 40, max_lines=2, placeholder=' ~'))
# Python can be easy to pick up whether
# you're a first time programmer or ~

همچنین می توانید رشته ای را برای اضافه شدن به ابتدای خط اول با آرگومان initial_indent تعیین کنید. هنگامی که می خواهید ابتدای یک پاراگراف را تورفتگی کنید، می توان از این مورد استفاده کرد.

print(textwrap.fill(s, 40, max_lines=2, placeholder=' ~', initial_indent='  '))
#   Python can be easy to pick up whether
# you're a first time programmer or ~

مراقب کاراکترهای سایز کامل و نیم سایز باشید.

در textwrap تعداد کاراکترها با تعداد کاراکترها کنترل می شود نه با عرض کاراکتر و هر دو کاراکتر تک بایت و دو بایت به عنوان یک کاراکتر در نظر گرفته می شوند.

s = '文字文字文字文字文字文字12345,67890, 文字文字文字abcde'

print(textwrap.fill(s, 12))
# 文字文字文字文字文字文字
# 12345,67890,
# 文字文字文字abcde

اگر می خواهید متنی را با کاراکترهای کانجی ترکیبی با عرض ثابت بپیچید، لطفاً به ادامه مطلب مراجعه کنید.

رشته های کوتاه (حذف شده):shorten()

اگر می‌خواهید رشته‌ها را کوتاه و حذف کنید، از تابع shorten() در ماژول textwrap استفاده کنید.

در واحدهای کلمه به اختصار برای جا دادن تعداد دلخواه کاراکتر. تعداد کاراکترها، از جمله رشته نشان دهنده حذف، دلخواه است. رشته ای که حذف را نشان می دهد را می توان با متغیر آرگومان تنظیم کرد که به صورت پیش فرض به صورت زیر است.
[...]'

s = 'Python is powerful'

print(textwrap.shorten(s, 12))
# Python [...]

print(textwrap.shorten(s, 12, placeholder=' ~'))
# Python is ~

با این حال، برای مثال، سیم های ژاپنی را نمی توان به خوبی خلاصه کرد، زیرا آنها را نمی توان به کلمات تقسیم کرد.

s = 'Pythonについて。Pythonは汎用のプログラミング言語である。'

print(textwrap.shorten(s, 20))
# [...]

اگر بخواهید با در نظر گرفتن تعداد کاراکترها به جای واحدهای کلمه اختصار کنید، به صورت زیر به راحتی قابل دستیابی است.

s_short = s[:12] + '...'
print(s_short)
# Pythonについて。P...

شی TextWrapper

اگر می خواهید بارها () یا fill() را با یک پیکربندی ثابت انجام دهید، ایجاد یک شی TextWrapper کارآمد است.

wrapper = textwrap.TextWrapper(width=30, max_lines=3, placeholder=' ~', initial_indent='  ')

s = "Python can be easy to pick up whether you're a first time programmer or you're experienced with other languages"

print(wrapper.wrap(s))
# ['  Python can be easy to pick', "up whether you're a first time", "programmer or you're ~"]

print(wrapper.fill(s))
#   Python can be easy to pick
# up whether you're a first time
# programmer or you're ~

از همان تنظیمات می توان دوباره استفاده کرد.

Copied title and URL