Как сохранить многострочную строку в одной строке и без множества пробелов

#python #string #multilinestring

#python #строка #multilinestring

Вопрос:

Я пытаюсь сохранить в текстовом формате многострочную строку без перевода строки и любых множественных пробелов:

 with open('test.txt','w') as f:    
f.write( r"""<rect
       x="0"
       y="0"
       width="%s"
       height="%s"
       stroke="red"
       stroke-width="1"
       fill-opacity="0"  />""" %(3,4) "n" )
  

Когда я открываю файл cat 'text.txt' , файл состоит из нескольких строк. Как я могу записать код в одной строке без нескольких пробелов?

 <rect x="0" y="0" width="3" height="4" stroke="red" stroke-width="1" fill-opacity="0" />
  

Без использования, например "".join() , или других методов, которые повлияют на читаемость кода?

Использование .replace('n', '') не приведет к удалению множества пробелов.

Комментарии:

1. Плохой отступ!

2. Также опубликуйте пример того, как вы хотели бы, чтобы файл выглядел!

3. попробуйте удалить конкатенацию » n» в конце?

4. @Vaibhavgusain нет, это для следующего элемента

Ответ №1:

Добавьте .replace('n', '') в конце строки.

Отредактировано: И под «в конце строки» я подразумеваю многострочную строку, например:

 f.write( r"""<rect
       x="0"
       y="0"
       width="%s"
       height="%s"
       stroke="red"
       stroke-width="1"
       fill-opacity="0"  />""".replace('n', '') %(3,4) "n" )
                              ^^^^^^^^^^^^^^^^^^
                                     HERE
  

Другая возможность заключается в использовании автоматической конкатенации строк Python следующим образом:

 f.write('<rect '
        'x="0" '
        'y="0" '
        'width="%s" '
        'height="%s" '
        'stroke="red" '
        'stroke-width="1" '
        'fill-opacity="0"/> ' % (3,4)   'n')
  

Комментарии:

1. Извините, у меня произошла ошибка, потому что я поместил оператор не в то место, теперь кажется, что это работает, но у меня есть все пробелы

2. В этом случае замените ‘n’ на ‘n’ или не ставьте пробелы в многострочных строках!

3. @GM Я обновил свой ответ, чтобы предоставить альтернативный способ обработки пробелов и перевода строк. Если это решит вашу проблему, не могли бы вы отметить мой ответ?

4. @Guybrush Большое спасибо! Обычно я жду несколько дней, чтобы дать возможность другим пользователям ответить!

5. @gm если проблема решена, зачем тратить время других пользователей? 😉

Ответ №2:

Я предполагаю, что вы хотите, чтобы весь код в 1 строке для многострочной строки?

тогда просто сделайте это следующим образом

 f.write(r"""<rect x="0" y="0" width="%s"
  

и т.д…

Таким образом, вы помещаете все в одну строку

Надеюсь, это поможет

Комментарии:

1. Спасибо, я это знаю, но если я напишу все в одной строке, я превыслю максимальную длину строки в 79 символов, указанную в PEP. Итак, это не ответ на мой вопрос

2. Вы уверены, что ваш код превышает максимальное количество символов в строке 79? потому что у меня это работало совершенно нормально, без каких-либо проблем.

3. Извините, я действительно запутался в том, что вы говорите о том, что PEP не выдает никаких ошибок? что касается меня, я вообще не получил ошибок

4. PEP — это руководство, которому следует следовать python.org/dev/peps/pep-0008/#id19 итак, я уверен, что ваше решение будет работать, но оно также не соответствует руководству ответ на мой вопрос