ดูเหมือนว่าจะพบฟังก์ชันสตริงย่อยใน python
สมมติว่าฉันต้องการส่งออก 100 อักขระแรกในสตริงฉันจะทำสิ่งนี้ได้อย่างไร
ฉันต้องการทำอย่างปลอดภัยเช่นกันหากสตริงมีความยาว 50 อักขระก็ไม่ควรล้มเหลว
ดูเหมือนว่าจะพบฟังก์ชันสตริงย่อยใน python
สมมติว่าฉันต้องการส่งออก 100 อักขระแรกในสตริงฉันจะทำสิ่งนี้ได้อย่างไร
ฉันต้องการทำอย่างปลอดภัยเช่นกันหากสตริงมีความยาว 50 อักขระก็ไม่ควรล้มเหลว
คำตอบ:
print my_string[0:100]
print 'foo'[:100](โปรดทราบว่าlen('foo')เป็น 3 ดังนั้นแม้ว่าfoo[100]จะไม่ได้ผลก็ตาม)
จากบทช่วยสอน Python :
ดัชนีสไลซ์ที่เสื่อมสภาพได้รับการจัดการอย่างสวยงาม: ดัชนีที่ใหญ่เกินไปจะถูกแทนที่ด้วยขนาดสตริงขอบเขตบนที่เล็กกว่าขอบเขตล่างจะส่งคืนสตริงว่าง
x[:100]ดังนั้นจึงมีความปลอดภัยในการใช้งาน
ง่าย:
print mystring[:100]
เพื่อตอบข้อกังวลของ Philipp (ในความคิดเห็น) การแบ่งส่วนก็ใช้ได้กับสตริง Unicode เช่นกัน
>>> greek=u"αβγδεζηθικλμνξοπρςστυφχψω"
>>> print len(greek)
25
>>> print greek[:10]
αβγδεζηθικ
หากคุณต้องการเรียกใช้โค้ดด้านบนเป็นสคริปต์ให้วางบรรทัดนี้ไว้ที่ด้านบนสุด
# -*- coding: utf-8 -*-
หากตัวแก้ไขของคุณไม่บันทึกใน utf-8 ให้เปลี่ยนการเข้ารหัสที่ถูกต้อง
ςและσเป็นตัวอักษรเดียวกัน :-)
greek_alphabetแล้ว :)
การแบ่งอาร์เรย์ทำได้ด้วย[first:last+1].
เคล็ดลับอย่างหนึ่งที่ฉันมักจะใช้บ่อยมากคือการระบุข้อมูลเพิ่มเติมด้วยจุดไข่ปลา ดังนั้นหากฟิลด์ของคุณมีอักขระหนึ่งร้อยตัวฉันจะใช้:
if len(s) <= 100:
print s
else:
print "%s..."%(s[:97])
และใช่ฉันรู้ว่า()มันไม่จำเป็นในกรณีนี้สำหรับตัว%ดำเนินการจัดรูปแบบมันเป็นแค่สไตล์ของฉัน
ตัวอย่างก่อนหน้านี้ส่วนใหญ่จะมีข้อยกเว้นในกรณีที่สตริงของคุณยาวไม่พอ
'yourstring'.ljust(100)[:100].strip()อีกวิธีหนึ่งคือการใช้งาน
สิ่งนี้จะทำให้คุณได้ 100 ตัวอักษรแรก คุณอาจได้สตริงที่สั้นกว่าในกรณีที่สตริงสุดท้ายของคุณเป็นช่องว่าง
การจัดรูปแบบสตริงโดยใช้%เป็นวิธีที่ดีในการจัดการสิ่งนี้ นี่คือตัวอย่างบางส่วน.
รหัสการจัดรูปแบบ'%s'จะแปลง'12345'เป็นสตริง แต่เป็นสตริงแล้ว
>>> '%s' % '12345'
'12345'
'%.3s' ระบุให้ใช้อักขระสามตัวแรกเท่านั้น
>>> '%.3s' % '12345'
'123'
'%.7s'บอกว่าจะใช้อักขระเจ็ดตัวแรก แต่มีเพียงห้าตัว ไม่มีปัญหา.
>>> '%.7s' % '12345'
'12345'
'%7s' ใช้อักขระไม่เกินเจ็ดตัวโดยเติมอักขระที่ขาดหายไปด้วยช่องว่างทางด้านซ้าย
>>> '%7s' % '12345'
' 12345'
'%-7s' ก็เหมือนกันยกเว้นการเติมอักขระที่ขาดหายไปทางด้านขวา
>>> '%-7s' % '12345'
'12345 '
'%5.3' บอกว่าใช้อักขระสามตัวแรก แต่เติมช่องว่างทางด้านซ้ายให้ครบห้าอักขระ
>>> '%5.3s' % '12345'
' 123'
สิ่งเดียวกันยกเว้นการเติมด้านขวา
>>> '%-5.3s' % '12345'
'123 '
สามารถจัดการกับข้อโต้แย้งหลาย ๆ
>>> 'do u no %-4.3sda%3.2s wae' % ('12345', 6789)
'do u no 123 da 67 wae'
หากคุณต้องการความยืดหยุ่นมากขึ้นstr.format()ก็สามารถใช้ได้เช่นกัน นี่คือเอกสารสำหรับทั้งสองอย่าง
[start:stop:step]
ดังนั้นหากคุณต้องการใช้อักขระตัวแรกเพียง 100 ตัวให้ใช้your_string[0:100]หรือyour_string[:100]
หากคุณต้องการใช้เฉพาะอักขระที่ตำแหน่งคู่ให้ใช้your_string[::2]
"ค่าเริ่มต้น" สำหรับการเริ่มต้นคือ 0 สำหรับ stop - len of string และสำหรับขั้นตอน - 1 ดังนั้น เมื่อคุณไม่ระบุอย่างใดอย่างหนึ่งและใส่ ':' มันจะใช้ค่าเริ่มต้น