Разделить длинную строку по 200 символов

У меня есть длинная строка, как я могу разделить ее по 200 символов, пытаюсь в конечном результате получить массив. Сейчас делаю таким образом

x = "длинная строка"
spl = [x[i:i+200] for i in range(0, len(x), 200)]

возможно есть более удачное решение, или библиотека?


Ответы (2 шт):

Автор решения: n1tr0xs

Это сэкономит время (в некотором смысле) и память, т.к. создается генератор, а не целиком список, но также лишит вас возможности обращаться к элементам по индексу (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 символов, да и этот функционал, как вы уже видите, реализуется слишком уж просто, чтобы выносить его в отдельную функцию.

→ Ссылка
Автор решения: OPTIMUS PRIME

Регулярное выражение 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) ) # ['длинн', 'ая ст', 'рока']
→ Ссылка