Как мне получить длину первой строки в многострочной строке?

У меня есть многострочная строка, созданная сценарием, который создает искусство ASCII из изображения. Он создает строку, затем добавляет \r и продолжает работу. Как мне получить длину первой строки или до того, как будет сказано \r, без использования регулярного выражения? Желательно, чтобы код был легко читаемым.


person Luke Taylor    schedule 24.05.2015    source источник
comment
Что не так с регулярным выражением? Думаю, они были бы подходящим решением.   -  person skrrgwasme    schedule 25.05.2015
comment
Есть другое решение? Я бы предпочел не использовать регулярное выражение только потому, что я его еще не изучил, и я бы предпочел, чтобы моя программа содержала только то, что я понимаю.   -  person Luke Taylor    schedule 25.05.2015


Ответы (4)


Пытаться:

first, _, _ = s.partition('\r')
k = len(first)

Если вам не нужна строка, вы можете просто использовать index:

k = s.index('\r')

Это работает, потому что s.index('\r') содержит самый низкий индекс k, для которого s[k] == '\r' - это означает, что в первой строке перед символом возврата каретки находится ровно k символов (с s[0] по s[k-1]).

person Lynn    schedule 24.05.2015
comment
Я принял это, потому что было полезно иметь всю строку раньше. Я использую PIL, чтобы найти размер строки в пикселях. Я использую моноширинный шрифт, поэтому не имеет значения, нахожу ли я размер всей строки или размер одного символа, умноженный на длину строки, но я чувствую себя безопаснее, определяя длину всей строки. - person Luke Taylor; 25.05.2015

С find или index?

>>> 'abcfoo\rhahahahaha'.find('\r')
6
>>> 'abcfoo\rhahahahaha'.index('\r')
6
person Stefan Pochmann    schedule 24.05.2015

На всякий случай понадобится еще одно решение ..:

with open('test.txt','r') as f:
    t = f.read()
    l = t.splitlines()
    print(len(l[0]))
person Oliver S.    schedule 24.05.2015
comment
Это тоже хорошо, мне нравится это решение. Проголосовали, но не приняли. - person Luke Taylor; 25.05.2015

import string
string.split(yourString, '\r')
length = len(string[0])

Итак, то, что у нас есть, прямолинейно. Мы берем вашу строку и разбиваем ее, как только получаем тег / r. Затем, поскольку все строки, заканчивающиеся на / r, находятся в массиве, мы просто подсчитываем первую захваченную строку в массиве и присваиваем ей длину var.

person Scott Johnson    schedule 24.05.2015
comment
Почему бы вам не отредактировать это, добавить строку с надписью length = len(string[0])? Это был бы правильный ответ, и он хорошо сработает. - person Luke Taylor; 25.05.2015
comment
Что ж, у вас уже есть так много отличных ответов, что к тому времени, когда я пришел редактировать его, на него уже были даны ответы, лол - person Scott Johnson; 25.05.2015
comment
@ScottJohnson Вы должны отредактировать свой ответ и добавить описание. С описанием ваш ответ будет здесь для потомков, а будущие пользователи с той же проблемой, что и OP, могут найти ваш ответ полезным и проголосовать за него. - person Luís Cruz; 25.05.2015