Как я могу добавить новую строку после количества непробельных символов? - PullRequest
0 голосов
/ 17 января 2020

Я пытаюсь добавить новую строку после определенного количества символов, и это работает.

outfile.write('\n'.join(line[i:i+K] for i in range(0,len(line), K)))

Я хотел бы изменить это, чтобы пробелы не учитывались (новая строка после количества непробелов).

Ответы [ 2 ]

0 голосов
/ 18 января 2020

Как и @Prune, я не нашел элегантного способа сделать это элегантно, используя какой-либо из существующих встроенных модулей - так что вот (другой) способ сделать это вручную.

Это работает создает список групп из K непробельных символов из заданной итерации и возвращает этот список после обработки всех символов в нем.

def grouper(iterable, K):
    nonspaced = []
    group = []
    count = 0
    for ch in iterable:
        group.append(ch)
        if ch != ' ':
            count += 1
            if count == 4:
                nonspaced.append(''.join(group))
                group = []
                count = 0
    if group:
        nonspaced.append(''.join(group))

    return nonspaced


K = 4
line = "I am trying to add a newline after a certain amount of characters."
for group in grouper(line, K):
    print(repr(group))

Вывод:

I am t'
'ryin'
'g to a'
'dd a n'
'ewli'
'ne af'
'ter a'
' cert'
'ain a'
'moun'
't of c'
'hara'
'cter'
's.'
0 голосов
/ 18 января 2020

Я провел некоторые исследования топи c и не нашел элегантного решения. У этой проблемы есть родственники, решения которых включают textwrap и несколько ответов , но ничего такого, что не решает вашу главную проблему ...

... это то, что вы хотите считать символы в зачеркнутой строке, но применять переводы строк к оригиналу. Решением этой проблемы может стать несколько замученная цепочка для поддержания обоих показателей. Вы должны были бы считать и буквы и пробелы; когда letter достигает кратного K, вы передаете полученный кусок вверх по линии, от вашей предыдущей конечной точки через строку [letter_count + space_count].

Честно говоря, я не понимаю Не думаю, что это будет стоить усилий для программирования, отладки, сопровождения и (особенно) документа для будущих программистов. Просто напишите l oop, чтобы перебрать вашу строку. Вот мучительно длинная версия:

line = "Now is the time for all good parties to come to the aid of man." + \
       "  It was the best of times, it was the worst of times."
K = 20

slugs = []
left = 0
count = 0
for idx, char in enumerate(line):
    if char != ' ':
        count += 1
    if count == K:
        count = 0
        slugs.append(line[left: idx+1])
        left = idx+1

slugs.append(line[left:])
print ('\n'.join(slugs))

Вывод:

Now is the time for all go
od parties to come to the
 aid of man.  It was the bes
t of times, it was the wor
st of times.
...