Как вставить разрывы строк в строки и строки перевода, чтобы удовлетворить требования PEP 8? - PullRequest
0 голосов
/ 30 января 2020

Я пытаюсь написать Python код, который соответствует требованиям PEP8. В руководстве по стилю кода PEP8 говорится, что строки кода в Python не должны быть длиннее 79 символов. В моем коде у меня много длинных строк, таких как:

string_name = "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam"

И у меня есть много длинных строк перевода, таких как:

string_name = _("Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam")

Я искал лучший и самый быстрый способ сломать эти строки, но я не нашел ответа, который удовлетворил бы меня. Например, я знаю, что могу вставлять разрывы вручную следующим образом:

string_name = "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, " \
"sed diam nonumy eirmod tempor invidunt ut labore et dolore magna " \
"aliquyam"

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

Я ищу лучший вариант или модуль, который может сделать это для меня.

Надеюсь, вы мне поможете.

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 31 января 2020
import textwrap

def pep8_textwrap(var_name, text, parentheses=False):
    '''Wrap text for code to be within 80 characters.'''

    # Variable name appended with assignment operator.
    var_name += ' = '

    if parentheses:
        var_name += '('

    # Indent size to align with right side of assignment.
    indent_size = len(var_name) - 1

    # Create a list of wrapped text.
    string_list = textwrap.wrap(text, width=75-indent_size)

    # Print the variable name equals without a newline.
    print(var_name, end='')

    # The last line so end of iteration will be known.
    last_line = len(string_list)

    # Print the wrapped text for pasting into code.
    for current_line, line in enumerate(string_list, 1):
        if current_line == 1:
            if last_line > 1 and not parentheses:
                print(repr(line + ' '), '\\')
            else:
                print(repr(line + ' '))
        elif current_line >= last_line:
            if parentheses:
                print(indent_size * ' ', repr(line) + ')')
            else:
                print(indent_size * ' ', repr(line))
        else:
            if parentheses:
                print(indent_size * ' ', repr(line + ' '))
            else:
                print(indent_size * ' ', repr(line + ' '), '\\')


# Text from 1st code example.
string_name = "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam"

# Call the function to print the result.
pep8_textwrap('string_name', string_name)

# Text from 3rd code example.
string_name = "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, " \
"sed diam nonumy eirmod tempor invidunt ut labore et dolore magna " \
"aliquyam"

pep8_textwrap('string_name', string_name, True)

# Text from the title.
string_name = "How do you insert line breaks in strings and translations string to meet the PEP 8 requirements?"

pep8_textwrap('var', string_name, True)

Скриптовое решение для воссоздания кода назначения. Результат будет выведен на стандартный вывод.

Скопируйте присвоение в скрипт и вызовите pep8_textwrap с параметрами имени переменной, которую нужно назначить, фактическим именем переменной для текста и, необязательно, True для использования скобок. или пропустите этот параметр, чтобы использовать обратную косую черту для продолжения строки на следующую строку.

Вывод:

string_name = 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed ' \
              'diam nonumy eirmod tempor invidunt ut labore et dolore magna ' \
              'aliquyam'
string_name = ('Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed '
               'diam nonumy eirmod tempor invidunt ut labore et dolore magna '
               'aliquyam')
var = ('How do you insert line breaks in strings and translations string to '
       'meet the PEP 8 requirements?')
0 голосов
/ 30 января 2020

Это должно сделать вещь:

string_name = "Lorem ipsum dolor sit amet," \
"consetetur sadipscing elitr, sed diam nonumy" \
"eirmod tempor invidunt ut labore et dolore magna aliquyam"
...