Найти - Пользователи
Полная версия: Вес строки
Начало » Python для новичков » Вес строки
1
maxim83632
Подскажите пожалуйста как вычислить размер строки в байтах?
Пытался вот так:
def get_size(text):
    str_size = 0  # Размер строки в байтах
    for i in text:
        if ord(i) <= 255:
            str_size += 1
        else:
            str_size += 2
    return str_size

Но результаты неверные выходят.

P.S пытаюсь обрезать название файла в случае, если оно слишком длинное. Возможно есть стандартные средства.
JOHN_16
maxim83632
как вычислить размер вес строки текста
казнить нельзя помиловать ? Это был намек

Вообще задача очень странная. Почему байты? Не количество символов, а именно байты?
Обрезать строку можно очень просто:
>>> len('string')
6
>>> len('string'[:3])
3
>>>

Если вам реально нужны байты, то тут вопрос сразу усложняется. Например это зависит от кодировки в случае не латиницы: (пример для Python2)
>>> su=u'Привет'
>>> len(su.encode('cp1251'))
6
>>> len(su.encode('utf-8'))
12
spikeqzz
maxim83632
P.S пытаюсь обрезать название файла в случае, если оно слишком длинное. Возможно есть стандартные средства.
Эмм… А зачем вам строку переводить в байты если можно для названия ее можно просто обрезать?

Если очень нужно то..
import sys
string = 'sassaasf'
x = sys.getsizeof(str(string))
print(x)

Вот тут посмотрите еще
spikeqzz
maxim83632
P.S пытаюсь обрезать название файла в случае, если оно слишком длинное. Возможно есть стандартные средства.

Вот попробуйте
string = 'sassaassasasassf' # Название файла
while str(len(string)) not in str(10):
	string = string[0:-1]
print(string)
Это просто обрезать название файла.
maxim83632
JOHN_16
2 способ ваш помог, спасибо) Почему-то не додумался перевести в байты и с ними работать.
JOHN_16
spikeqzz
x = sys.getsizeof(str(string))
НЕ ВЕРНО
Во первых читаем внимательно документацию, из которой узнаем что данная функция вызывает у объекта метод __sizeof__, который мы можем переопределить на свое усмотрение. На самом деле функция возвращает размер Python объекта занимаемого в памяти, для встроенных типов данных.
Во вторых, вы сами то смотрели свой код? Чему равно x ? 29 байт - ну явно же строка записанная в файл не будет столько места занимать.

spikeqzz
string = ‘sassaassasasassf’ # Название файла while str(len(string)) not in str(10): string = string print(string)
Вот такое посылают на сайт говнокод.ру, это ужас.
spikeqzz
Это просто обрезать название файла.
просто это
string[:10]
,а не отдельная функция с циклом да еще и своеобразной проверкой с многократной избыточностью действий. В доказательство к этому замерем быстродейтсвие:
>>> import timeit
>>> s2="""string = 'sassaassasasassf' # Название файла
... while str(len(string)) not in str(10):
...     string = string[0:-1]"""
>>> s1="""string='sassaassasasassf'
... string[:10]"""
>>>
>>>
>>> timeit.timeit(s1)
0.10035684764609484
>>> timeit.timeit(s2)
5.764144958001218
Ваш код в 57 раз медленее. Что и не удивительно.

P.S. учитесь и со временем будете писать нормальный код.

This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB