Làm thế nào để có được kích thước của một chuỗi trong Python?


157

Ví dụ: tôi nhận được một chuỗi:

str = "please answer my question"

Tôi muốn viết nó vào một tập tin.

Nhưng tôi cần biết kích thước của chuỗi trước khi viết chuỗi vào tệp. Tôi có thể sử dụng hàm nào để tính kích thước của chuỗi?


1
"Tôi có thể sử dụng chức năng nào để tính kích thước của chuỗi"? Hướng dẫn nào bạn đang sử dụng để học Python? Vui lòng cập nhật câu hỏi với một số thông tin về nơi bạn học Python.
S.Lott

1
Tôi tự học python, bây giờ tôi biết len ​​(str) có thể trả về kích thước của chuỗi, kích thước phụ thuộc vào mã hóa của str.
babykick

Câu trả lời:


258

Nếu bạn đang nói về độ dài của chuỗi, bạn có thể sử dụng len():

>>> s = 'please answer my question'
>>> len(s)  # number of characters in s
25

Nếu bạn cần kích thước của chuỗi theo byte, bạn cần sys.getsizeof():

>>> import sys
>>> sys.getsizeof(s)
58

Ngoài ra, đừng gọi biến chuỗi của bạn str. Nó làm mờ str()chức năng tích hợp.


33
sys.getsizeoftrả về số byte mà đối tượng Python chiếm trong bộ nhớ. Điều đó sẽ không hữu ích để ghi vào một tệp trong mọi trường hợp.
Duncan

cảm ơn, nhưng sys.getsizeof (s) chỉ là kích thước của tập tin? hoặc kích thước của đối tượng python?
babykick

@Duncan vậy làm thế nào để đề xuất những gì sẽ hữu ích thay thế?
cryanbhu

4
@cryanbhu Tôi không biết tại sao OP muốn kích thước và điều đó sẽ ảnh hưởng đến câu trả lời, nhưng có lẽ hữu ích nhất là len(s.encode('utf8'))hoặc bất kỳ mã hóa nào khác sẽ được sử dụng khi ghi vào tệp. Ngoài ra, nếu họ cũng muốn một null kết thúc thì họ sẽ cần thêm 1 cho điều đó.
Duncan

33

Con trăn 3:

Câu trả lời của user225312 là đúng:

A. Để đếm số lượng ký tự trong strđối tượng, bạn có thể sử dụng len()hàm:

>>> print(len('please anwser my question'))
25

B. Để có được kích thước bộ nhớ theo byte được phân bổ để lưu trữ strđối tượng, bạn có thể sử dụng sys.getsizeof()hàm

>>> from sys import getsizeof
>>> print(getsizeof('please anwser my question'))
50

Con trăn 2:

Nó trở nên phức tạp đối với Python 2.

A. Các len()chức năng trong Python 2 lợi nhuận đếm byte được phân bổ để lưu trữ mã hóa ký tự trong một strđối tượng.

Đôi khi nó sẽ bằng số lượng ký tự:

>>> print(len('abc'))
3

Nhưng đôi khi, nó sẽ không:

>>> print(len('йцы'))  # String contains Cyrillic symbols
6

Đó là bởi vì strcó thể sử dụng mã hóa có độ dài thay đổi trong nội bộ. Vì vậy, để đếm các ký tự trong strbạn nên biết mã hóa strđối tượng của bạn đang sử dụng. Sau đó, bạn có thể chuyển đổi nó thành unicodeđối tượng và nhận được số ký tự:

>>> print(len('йцы'.decode('utf8'))) #String contains Cyrillic symbols 
3

B. Các sys.getsizeof()chức năng làm điều tương tự như trong Python 3 - nó trả về số byte được phân bổ để lưu trữ các đối tượng chuỗi toàn bộ

>>> print(getsizeof('йцы'))
27
>>> print(getsizeof('йцы'.decode('utf8')))
32


2

Bạn cũng có thể sử dụng str.len () để đếm chiều dài của phần tử trong cột

data['name of column'].str.len() 

1

Cách Pythonic nhất là sử dụng len(). Hãy nhớ rằng ký tự '\' trong chuỗi thoát không được tính và có thể gây nguy hiểm nếu không được sử dụng đúng cách.

>>> len('foo')
3
>>> len('\foo')
3
>>> len('\xoo')
  File "<stdin>", line 1
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 0-1: truncated \xXX escape
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.