Python 3 печатает в файл со смесью «и» в строке

#python #html #string

#python #HTML #строка

Вопрос:

Я создаю выходной файл HTML, используя ванильный Python 3, и я хочу использовать макет с несколькими вкладками (http://www.w3schools.com/howto/tryit.asp?filename=tryhow_js_tabs_close ), чтобы помочь организовать мою презентацию.

При попытке печати: ' <li><a href="#" class="tablinks active" onclick="openTab(event, 'Faults')"><b>Faults</b></a></li>' я сталкиваюсь с ситуацией, когда мне нужно включить символы (‘) и («) в строку. Я пытался использовать только символы («) внутри строки и использовать (‘) для определения строки, однако это нарушает функциональность html кода.

Если я использую 'partial string {}Faults{} more string'.format("'","'") , я вижу этот вывод:

 '  <li><a href="#" class="tablinks active" onclick="openTab(event, 'Faults')"><b>Faults</b></a></li>)'
  

Аналогично, если я попытаюсь объединить строки вместе,

 b = '  <li><a href="#" class="tablinks active" onclick="openTab(event, '
c = "'Faults'"
d = ')"><b>Faults</b></a></li>)
('').join([b,c,d])
  

Я получаю точно то же самое, что и при моей первой попытке.

 '  <li><a href="#" class="tablinks active" onclick="openTab(event, 'Faults')"><b>Faults</b></a></li>)'
  

Есть ли какой-либо способ обойти эту проблему при печати в файл?
Спасибо.

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

1. «Я получаю точно то же самое, что и при моей первой попытке». Это то, что вы получаете при печати? Когда вы смотрите на результат в интерактивном приглашении? Или когда вы записываете это в файл и открываете файл с помощью блокнота? Каждый из них может отображаться иначе, чем другие.

2. ' это escape-последовательность и она правильная. 'singled 'quote' example' = singled 'quote' example

Ответ №1:

' <li><a href="#" class="tablinks active" onclick="openTab(event, 'Faults')"><b>Faults</b></a></li>'

Вам нужно экранировать одинарные кавычки в одинарных кавычках. Если вы запишете это в файл, все будет так, как вы хотите.

Или используйте ''' <li><a href="#" class="tablinks active" onclick="openTab(event, 'Faults')"><b>Faults</b></a></li>'''

Обратите внимание на тройные кавычки?

Интересная статья об экранировании в Python: Изучайте Python трудным путем

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

1. Это действительно помогло! Спасибо, что указали ресурсы, которые я могу прочитать, чтобы узнать больше. Я ценю это. Я работал с n раньше, но не думал ни о каких других связанных параметрах.

Ответ №2:

С вашим format подходом нет проблем; то, что вы видите, — это просто представление строки в Python по умолчанию. Используйте print '...'.format("'", "'") , и это должно выглядеть так, как вы ожидаете.

 >>> print '  <li><a href="#" class="tablinks active" onclick="openTab(event, {}Faults{})"><b>Faults</b></a></li>'.format("'", "'")
  <li><a href="#" class="tablinks active" onclick="openTab(event, 'Faults')"><b>Faults</b></a></li>
  

Однако вы можете избежать использования format , просто используя многострочный строковый литерал ( """...""" или '''...''' ), который может содержать неэкранированные кавычки любого вида.

 >>> print '''  <li><a href="#" class="tablinks active" onclick="openTab(event, 'Faults')"><b>Faults</b></a></li>'''
  <li><a href="#" class="tablinks active" onclick="openTab(event, 'Faults')"><b>Faults</b></a></li>
  

Ответ №3:

Используйте тройные символы ''' или """ . Это многострочная строка (и строка документа) в python.

Например:

 '''
hello world! I can write ' and " and also " and ' "''""'''"""
'''
  

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

1. Это не комментарий; Python все еще должен создать объект string, определенный литералом.

2. Да, это строка документа.

3. Однострочные строки также могут использоваться в качестве строк документа, а многострочные строки могут быть присвоены именам ( v = """...""" ). Эти две концепции полностью ортогональны.