Разделить длинную строку по 200 символов
У меня есть длинная строка, как я могу разделить ее по 200 символов, пытаюсь в конечном результате получить массив. Сейчас делаю таким образом
x = "длинная строка"
spl = [x[i:i+200] for i in range(0, len(x), 200)]
возможно есть более удачное решение, или библиотека?
Ответы (2 шт):
Это сэкономит время (в некотором смысле) и память, т.к. создается генератор, а не целиком список, но также лишит вас возможности обращаться к элементам по индексу (spl[i]):
spl = (x[i:i+200] for i in range(0, len(x), 200)).
Эквивалент в функции-генераторе:
def split_by_count(string):
for i in range(0, len(string), 200):
yield x[i:i+200]
"Универсализация":
def split_by_count(string, start=0, count=1):
for i in range(start, len(string), count):
yield string[i:i+count]
По поводе библиотеки: сомневаюсь, что есть библиотека, которая просто разделяет строку по 200 символов, да и этот функционал, как вы уже видите, реализуется слишком уж просто, чтобы выносить его в отдельную функцию.
Регулярное выражение r'.{1,200}', будет захватывать любые символы от 1 до 200 штук (кроме переноса строки). Добавить флажок re.DOTALL — начнет находить перенос строки включительно. А re.findall() сразу возвращает массив совпадений.
import re
x = "длинная строка"
def cut(x, chunk = 200):
return re.findall(r'.{1,' + str(chunk) + '}', x, re.DOTALL)
print( cut(x, 5) ) # ['длинн', 'ая ст', 'рока']
Другой вариант: Сразу выделить массив нужного размера и циклом добавлять символы к нужным элементам:
x = "длинная строка"
def cut(x, chunk = 200):
i = 0; result = [""] * (len(x) // chunk + bool(len(x) % chunk))
# а-ля math.ceil(len(x) / chunk)
for char in x:
result[i // chunk] += char
i += 1
return result
print( cut(x, 5) ) # ['длинн', 'ая ст', 'рока']