วิธีรับขนาดของสตริงใน Python


157

ตัวอย่างเช่นฉันได้รับสตริง:

str = "please answer my question"

ฉันต้องการเขียนลงไฟล์

แต่ฉันต้องรู้ขนาดของสตริงก่อนที่จะเขียนสตริงลงในไฟล์ ฉันสามารถใช้ฟังก์ชันใดในการคำนวณขนาดของสตริงได้


1
"ฟังก์ชันใดที่ฉันสามารถใช้ในการคำนวณขนาดของสตริง" คุณใช้บทช่วยสอนอะไรเพื่อเรียนรู้ Python โปรดอัปเดตคำถามด้วยข้อมูลบางอย่างเกี่ยวกับตำแหน่งและวิธีการเรียนรู้ของ Python
S.Lott

1
ฉันเรียนรู้หลามด้วยตัวเองตอนนี้ฉันรู้ว่า len (str) สามารถคืนค่าขนาดของสตริงขนาดขึ้นอยู่กับการเข้ารหัสของ str
babykick

คำตอบ:


258

หากคุณกำลังพูดถึงความยาวของสตริงคุณสามารถใช้len():

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

หากคุณต้องการขนาดของสตริงเป็นไบต์คุณต้องsys.getsizeof():

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

strนอกจากนี้ยังจะไม่เรียกตัวแปรสตริงของคุณ มันเงาstr()ฟังก์ชั่นในตัว


33
sys.getsizeofส่งคืนจำนวนไบต์ที่วัตถุ Python ใช้ในหน่วยความจำ นั่นจะไม่เป็นประโยชน์สำหรับการเขียนไฟล์ในทุกสถานการณ์
ดันแคน

ขอบคุณ แต่ sys.getsizeof (s) เป็นเพียงขนาดของไฟล์? หรือขนาดของวัตถุหลาม?
babykick

@Duncan ดังนั้นวิธีการเกี่ยวกับการแนะนำสิ่งที่จะเป็นประโยชน์แทน?
cryanbhu

4
@cryanbhu ฉันไม่ทราบว่าทำไม OP ต้องการขนาดและที่จะส่งผลกระทบต่อคำตอบ แต่อาจมีประโยชน์มากที่สุดจะเป็นlen(s.encode('utf8'))หรือสิ่งที่การเข้ารหัสอื่น ๆ จะถูกใช้เมื่อเขียนไปยังไฟล์ นอกจากนี้หากพวกเขาต้องการโมฆะสิ้นสุดพวกเขาจะต้องเพิ่ม 1 สำหรับสิ่งนั้น
Duncan

33

Python 3:

คำตอบของ user225312ถูกต้อง:

A.หากต้องการนับจำนวนตัวอักษรในstrวัตถุคุณสามารถใช้len()ฟังก์ชั่น:

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

B.ในการรับขนาดหน่วยความจำในหน่วยไบต์เพื่อจัดเก็บstrวัตถุคุณสามารถใช้sys.getsizeof()ฟังก์ชั่น

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

Python 2:

มันซับซ้อนสำหรับ Python 2

A.len()ฟังก์ชั่นในหลาม 2 ผลตอบแทนนับไบต์จัดสรรให้กับร้านตัวอักษรเข้ารหัสในstrวัตถุ

บางครั้งมันจะเท่ากับจำนวนตัวอักษร:

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

แต่บางครั้งมันจะไม่:

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

นั่นเป็นเพราะstrสามารถใช้การเข้ารหัสความยาวผันแปรได้ ดังนั้นในการนับตัวละครในstrคุณควรรู้ว่าการเข้ารหัสstrวัตถุของคุณกำลังใช้งานอยู่ จากนั้นคุณสามารถแปลงเป็นunicodeวัตถุและรับจำนวนอักขระ:

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

บีsys.getsizeof()ฟังก์ชั่นจะเป็นสิ่งเดียวกับในหลาม 3 - มันคืนนับไบต์จัดสรรในการจัดเก็บวัตถุสตริงทั้ง

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



1

ส่วนใหญ่Pythoniclen()วิธีคือการใช้ โปรดทราบว่าอักขระ '\' ในลำดับหลีกไม่นับรวมและอาจเป็นอันตรายได้หากไม่ได้ใช้อย่างถูกต้อง

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