เอาต์พุต 100 อักขระแรกในสตริง


108

ดูเหมือนว่าจะพบฟังก์ชันสตริงย่อยใน python

สมมติว่าฉันต้องการส่งออก 100 อักขระแรกในสตริงฉันจะทำสิ่งนี้ได้อย่างไร

ฉันต้องการทำอย่างปลอดภัยเช่นกันหากสตริงมีความยาว 50 อักขระก็ไม่ควรล้มเหลว


2
สิ่งที่ตามมาสำหรับคำถามนี้คือ: ไพรเมอร์ที่ดีสำหรับสัญกรณ์ Python slice
Greg Hewgill

1
คุณหมายถึงอะไรกับ "ตัวอักษร"? จุดรหัสกลุ่มกราฟหรือหน่วยรหัส? การแบ่งส่วนจะนับหน่วยรหัสซึ่งอาจไม่ได้ผลลัพธ์ที่ต้องการ
Philipp

คำตอบ:


168
print my_string[0:100]

5
นอกจากนี้ยังใช้งานได้กับสตริงที่สั้นกว่า 100 เช่นprint 'foo'[:100](โปรดทราบว่าlen('foo')เป็น 3 ดังนั้นแม้ว่าfoo[100]จะไม่ได้ผลก็ตาม)
Rodrigo Laguna

68

จากบทช่วยสอน Python :

ดัชนีสไลซ์ที่เสื่อมสภาพได้รับการจัดการอย่างสวยงาม: ดัชนีที่ใหญ่เกินไปจะถูกแทนที่ด้วยขนาดสตริงขอบเขตบนที่เล็กกว่าขอบเขตล่างจะส่งคืนสตริงว่าง

x[:100]ดังนั้นจึงมีความปลอดภัยในการใช้งาน



7

เพื่อตอบข้อกังวลของ Philipp (ในความคิดเห็น) การแบ่งส่วนก็ใช้ได้กับสตริง Unicode เช่นกัน

>>> greek=u"αβγδεζηθικλμνξοπρςστυφχψω"
>>> print len(greek)
25
>>> print greek[:10]
αβγδεζηθικ

หากคุณต้องการเรียกใช้โค้ดด้านบนเป็นสคริปต์ให้วางบรรทัดนี้ไว้ที่ด้านบนสุด

# -*- coding: utf-8 -*-

หากตัวแก้ไขของคุณไม่บันทึกใน utf-8 ให้เปลี่ยนการเข้ารหัสที่ถูกต้อง


2
ไม่ได้ดูหมิ่นคำตอบของคุณ แต่มีเพียง 24 ตัวอักษรในภาษากรีกςและσเป็นตัวอักษรเดียวกัน :-)
paxdiablo

4
@paxdiablo ดูสิ! ฉันคัดลอกมาจากหน้าวิกิพีเดีย โชคดีที่ฉันไม่ได้ตั้งชื่อตัวแปรgreek_alphabetแล้ว :)
John La Rooy

4

การแบ่งอาร์เรย์ทำได้ด้วย[first:last+1].

เคล็ดลับอย่างหนึ่งที่ฉันมักจะใช้บ่อยมากคือการระบุข้อมูลเพิ่มเติมด้วยจุดไข่ปลา ดังนั้นหากฟิลด์ของคุณมีอักขระหนึ่งร้อยตัวฉันจะใช้:

if len(s) <= 100:
    print s
else:
    print "%s..."%(s[:97])

และใช่ฉันรู้ว่า()มันไม่จำเป็นในกรณีนี้สำหรับตัว%ดำเนินการจัดรูปแบบมันเป็นแค่สไตล์ของฉัน


ฉันเดาว่านี่คงหมายถึงอาหารสำหรับความคิด แต่ในกรณีของ OP ฉันคงไม่แนะนำให้ทำอย่างนั้น ผลลัพธ์จะเป็นสตริงที่คุณจะต้องตรวจสอบเนื้อหาเพื่อตัดแต่งเพิ่มเติมหรืออะไรทำนองนั้น ในกรณีนี้ฉันคิดว่ามีใครต้องการให้ตัวเลขนั้นเป็นตัวแปรและผลลัพธ์จะถูกต้องเสมอหรือต้องแก้ไขตัวเลขและการจัดการไม่ว่าจะเป็นสิ่งที่มีความหมายหรือผิดพลาดหรือส่งคืนอย่างสง่างามในกรณีที่ล้มเหลว ฉันไม่สามารถนึกถึงหลาย ๆ กรณีได้นอกจากการส่งข้อมูลที่มนุษย์อ่านได้ซึ่งฉันต้องการเพิ่มข้อความลงในสตริงโดยพลการ

3

ตัวอย่างก่อนหน้านี้ส่วนใหญ่จะมีข้อยกเว้นในกรณีที่สตริงของคุณยาวไม่พอ

'yourstring'.ljust(100)[:100].strip()อีกวิธีหนึ่งคือการใช้งาน

สิ่งนี้จะทำให้คุณได้ 100 ตัวอักษรแรก คุณอาจได้สตริงที่สั้นกว่าในกรณีที่สตริงสุดท้ายของคุณเป็นช่องว่าง


ขอบคุณ. แปลกว่าทำไมคำตอบที่ดีที่สุดใน stackoverflow ไม่ได้รับการยอมรับและโหวตได้ง่าย
Basil Musa

3

การจัดรูปแบบสตริงโดยใช้%เป็นวิธีที่ดีในการจัดการสิ่งนี้ นี่คือตัวอย่างบางส่วน.

รหัสการจัดรูปแบบ'%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()ก็สามารถใช้ได้เช่นกัน นี่คือเอกสารสำหรับทั้งสองอย่าง


0
[start:stop:step]

ดังนั้นหากคุณต้องการใช้อักขระตัวแรกเพียง 100 ตัวให้ใช้your_string[0:100]หรือyour_string[:100] หากคุณต้องการใช้เฉพาะอักขระที่ตำแหน่งคู่ให้ใช้your_string[::2] "ค่าเริ่มต้น" สำหรับการเริ่มต้นคือ 0 สำหรับ stop - len of string และสำหรับขั้นตอน - 1 ดังนั้น เมื่อคุณไม่ระบุอย่างใดอย่างหนึ่งและใส่ ':' มันจะใช้ค่าเริ่มต้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.