Xuất ra 100 ký tự đầu tiên trong một chuỗi


108

Dường như có thể tìm thấy một hàm chuỗi con trong python.

Giả sử tôi muốn xuất ra 100 ký tự đầu tiên trong một chuỗi, làm cách nào để làm điều này?

Tôi cũng muốn làm điều đó một cách an toàn, lặp lại nếu chuỗi có 50 ký tự thì nó sẽ không bị lỗi.


2
Các followup cho câu hỏi này là: Tốt mồi cho ký hiệu lát Python
Greg Hewgill

1
Ý bạn là gì với "ký tự"? Điểm mã, cụm grapheme hay đơn vị mã? Việc cắt lát sẽ đếm các đơn vị mã, điều này có thể không cho kết quả mong muốn.
Philipp

Câu trả lời:


168
print my_string[0:100]

5
nó cũng làm việc cho chuỗi ngắn hơn 100, ví dụ print 'foo'[:100](lưu ý rằng len('foo')là 3, vì vậy ngay cả khi foo[100]không làm việc, nó không)
Rodrigo Laguna

67

Từ hướng dẫn python :

Các chỉ số của lát cắt tạo ra được xử lý một cách duyên dáng: một chỉ mục quá lớn được thay thế bằng kích thước chuỗi , giới hạn trên nhỏ hơn giới hạn dưới trả về một chuỗi trống.

Vì vậy, nó là an toàn để sử dụng x[:100].



7

Để giải đáp mối quan tâm của Philipp (trong phần bình luận), việc cắt lát cũng hoạt động tốt đối với các chuỗi unicode

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

Nếu bạn muốn chạy đoạn mã trên dưới dạng tập lệnh, hãy đặt dòng này ở đầu

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

Nếu trình chỉnh sửa của bạn không lưu trong utf-8, hãy thay thế mã hóa chính xác


2
Không chê bai câu trả lời của bạn, nhưng có một chỉ có 24 chữ cái trong tiếng Hy Lạp, ςσlà cùng một lá thư :-)
paxdiablo

4
@paxdiablo, doh! Tôi đã sao chép chúng khỏi trang wikipedia. May mắn thay, tôi đã không đặt tên cho biến greek_alphabetsau đó :)
John La Rooy

4

Việc cắt các mảng được thực hiện với [first:last+1].

Một mẹo mà tôi có xu hướng sử dụng nhiều là chỉ ra thông tin bổ sung bằng dấu chấm lửng. Vì vậy, nếu trường của bạn là một trăm ký tự, tôi sẽ sử dụng:

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

Và vâng, tôi biết ()là không cần thiết trong trường hợp này đối với %toán tử định dạng, đó chỉ là phong cách của tôi.


Tôi đoán đây là thức ăn để suy nghĩ, nhưng trong trường hợp của OP, tôi có lẽ sẽ không đề nghị làm điều đó. Kết quả sẽ là một chuỗi mà bạn sẽ phải kiểm tra nội dung để cắt bớt hoặc tương tự như vậy. Trong trường hợp này, tôi sẽ tưởng tượng một người sẽ muốn số đó có thể thay đổi và kết quả luôn đúng hoặc số được cố định và việc xử lý hoặc tạo ra một cái gì đó có ý nghĩa, hoặc lỗi hoặc trả về một cách duyên dáng trong trường hợp không thành công. Tôi không thể nghĩ ra nhiều trường hợp, ngoài việc cung cấp thông tin con người có thể đọc được, trong đó tôi muốn thêm văn bản tùy ý vào một chuỗi.

3

Hầu hết các ví dụ trước sẽ nêu ra một ngoại lệ trong trường hợp chuỗi của bạn không đủ dài.

Một cách tiếp cận khác là sử dụng 'yourstring'.ljust(100)[:100].strip().

Điều này sẽ cung cấp cho bạn 100 ký tự đầu tiên. Bạn có thể nhận được một chuỗi ngắn hơn trong trường hợp các ký tự cuối cùng của chuỗi của bạn là khoảng trắng.


Cảm ơn. Thật kỳ lạ tại sao các câu trả lời hay nhất trên stackoverflow không được công nhận và ủng hộ một cách dễ dàng.
Basil Musa

2

Sử dụng định dạng chuỗi %là một cách tuyệt vời để xử lý điều này. Đây là một số ví dụ.

Mã định dạng '%s'chuyển đổi '12345'thành một chuỗi, nhưng nó đã là một chuỗi.

>>> '%s' % '12345'

'12345'

'%.3s' chỉ định chỉ sử dụng ba ký tự đầu tiên.

>>> '%.3s' % '12345'

'123'

'%.7s'cho biết sử dụng bảy ký tự đầu tiên, nhưng chỉ có năm ký tự. Không vấn đề gì.

>>> '%.7s' % '12345'

'12345'

'%7s' sử dụng tối đa bảy ký tự, điền các ký tự bị thiếu vào khoảng trống ở bên trái.

>>> '%7s' % '12345'

'  12345'

'%-7s' là điều tương tự, ngoại trừ việc điền các ký tự còn thiếu ở bên phải.

>>> '%-7s' % '12345'

'12345  '

'%5.3' cho biết sử dụng ba ký tự đầu tiên, nhưng điền vào khoảng trống ở bên trái để có tổng cộng năm ký tự.

>>> '%5.3s' % '12345'

'  123'

Điều tương tự ngoại trừ điền vào bên phải.

>>> '%-5.3s' % '12345'

'123  '

Có thể xử lý nhiều đối số quá!

>>> 'do u no %-4.3sda%3.2s wae' % ('12345', 6789)

'do u no 123 da 67 wae'

Nếu bạn yêu cầu sự linh hoạt hơn nữa, str.format()cũng có sẵn. Đây là tài liệu cho cả hai.


0
[start:stop:step]

Vì vậy, Nếu bạn chỉ muốn lấy 100 ký tự đầu tiên, hãy sử dụng your_string[0:100]hoặc your_string[:100] Nếu bạn muốn chỉ lấy ký tự ở vị trí chẵn, hãy sử dụng your_string[::2] "Giá trị mặc định" cho bắt đầu là 0, cho điểm dừng - len của chuỗi và cho bước - 1. Vì vậy khi bạn không cung cấp một trong số nó và đặt ':', nó sẽ sử dụng giá trị mặc định.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.