У меня есть многострочная строка, созданная сценарием, который создает искусство ASCII из изображения. Он создает строку, затем добавляет \r
и продолжает работу. Как мне получить длину первой строки или до того, как будет сказано \r
, без использования регулярного выражения? Желательно, чтобы код был легко читаемым.
Как мне получить длину первой строки в многострочной строке?
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
Я принял это, потому что было полезно иметь всю строку раньше. Я использую 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
Это тоже хорошо, мне нравится это решение. Проголосовали, но не приняли.
- 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
Почему бы вам не отредактировать это, добавить строку с надписью
length = len(string[0])
? Это был бы правильный ответ, и он хорошо сработает.
- person Luke Taylor; 25.05.2015
Что ж, у вас уже есть так много отличных ответов, что к тому времени, когда я пришел редактировать его, на него уже были даны ответы, лол
- person Scott Johnson; 25.05.2015
@ScottJohnson Вы должны отредактировать свой ответ и добавить описание. С описанием ваш ответ будет здесь для потомков, а будущие пользователи с той же проблемой, что и OP, могут найти ваш ответ полезным и проголосовать за него.
- person Luís Cruz; 25.05.2015