التفاف واقتطاع وتنسيق السلاسل في بايثون مع التفاف النص

اعمال

لتنسيق سلسلة في Python عن طريق لفها (فصل سطر) واقتطاعها (اختصارها) بعدد عشوائي من الأحرف ، استخدم وحدة التفاف النص في المكتبة القياسية.

يتم توفير المعلومات التالية هنا.

  • التفاف الخيط (خط التغذية):wrap()وfill()
  • سلاسل مقتطعة (محذوفة):shorten()
  • كائن TextWrapper

إذا كنت تريد كتابة سلاسل طويلة على عدة أسطر في التعليمات البرمجية بدلاً من كتابة في الإخراج ، فراجع المقالة التالية.

التفاف الخيط (خط التغذية):wrap()وfill()

باستخدام التفاف الوظيفة () لوحدة التفاف النص ، يمكنك الحصول على قائمة مقسمة بفواصل الكلمات لتلائم عددًا عشوائيًا من الأحرف.

حدد عدد الأحرف لعرض الوسيطة الثانية. الافتراضي هو العرض = 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 () سلسلة سطر جديد بدلاً من قائمة. إنه نفس تنفيذ الكود التالي بعد الالتفاف () كما في المثال أعلاه.
\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

إذا تم تحديد السطر الأقصى للوسيطة ، فسيتم حذف عدد الأسطر التي تليها.

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()

إذا كنت تريد اقتطاع سلاسل وحذفها ، فاستخدم وظيفة تقصير () في وحدة التفاف النص.

يتم اختصارها بوحدات الكلمات لتناسب عددًا عشوائيًا من الأحرف. عدد الأحرف ، بما في ذلك السلسلة التي تشير إلى الحذف ، أمر تعسفي. يمكن تعيين السلسلة التي تشير إلى الحذف باستخدام العنصر النائب الخاص بالوسيطة ، والذي يتم تعيينه افتراضيًا على ما يلي.
[...]'

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

إذا كنت ستلتف () أو تملأ () عدة مرات بتكوين ثابت ، فمن الفعال إنشاء كائن 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 ~

يمكن إعادة استخدام نفس الإعدادات.