target.write(line1 \n, line2 \n, line3 \n)
'\ n' имеет смысл только внутри строкового литерала.Без кавычек у вас нет строковых литералов.
target.write('line1 \n, line2 \n, line3 \n')
Хорошо, теперь все является строковым литералом.Но вы хотите, чтобы line1, line2, line3 не были строковыми литералами.Вы нуждаетесь в них как в выражениях python, чтобы ссылаться на рассматриваемые переменные.По сути, вы должны помещать кавычки вокруг строк, которые на самом деле являются текстом типа \ n, но не вокруг переменных.Если бы вы сделали это, вы могли бы получить что-то вроде:
target.write(line1 '\n' line2 '\n' line3 '\n')
Что такое 2 2
?Ничего.Вы должны указать Python, как объединить две части.Таким образом, вы можете иметь 2 + 2
или 2 * 2
, но 2 2
не имеет никакого смысла.В этом случае мы используем add для объединения двух строк
target.write(line + '\n' + line2 + '\n' + line3 + '\n')
Двигаясь дальше,
target.write(%r \n, %r \n, %r \n) % (line1, line2, line3)
Опять \n
имеет смысл только внутри строкового литерала.Оператор%, используемый для создания строк, принимает строку в качестве левой части.Таким образом, вам нужны все эти детали форматирования внутри строки.
target.write('%r \n', '%r \n', '%r \n') % (line1, line2, line3)
Но они производят 3 строковых литерала, вам нужен только один.Если вы сделали это, напишите жалобу, потому что она исключает одну строку, а не 3. Таким образом, вы могли попробовать что-то вроде:
target.write('%r \n%r \n%r \n') % (line1, line2, line3)
Но вы хотите записать в файл строку1, строку2, строку3.В этом случае вы пытаетесь выполнить форматирование после того, как запись уже завершена.Когда python выполнит это, он запустит target.write первым, оставив:
None % (line1, line2, line3)
, что не принесет ничего полезного.Чтобы это исправить, нам нужно поместить % ()
внутрь .write()
target.write('%r\n%r\n%r\n' % (line1, line2, line3))