我正在尝试编写一个python代码(让我们称之为script_A),它本身会编写另一个python脚本(Script_B),执行时会创建一个文本文件,其中包含python代码行,其中每个line应以换行符结束。问题是将newline命令输入script_A中的代码会导致问题......
这是我的代码:
Script_A中的行:
main=open('Script_B', "wb")
main.write("fo=open('textfile', 'a')\n")
main.write("fo.write('text to be ended with a newline command\n')\n")
main.close()
然后,执行script_A,将创建包含以下文本的script_B:
fo=open('textfile', 'a')
fo.write(‘text to be ended with a newline command
‘)
Script_B将无法运行:
File "Script_B", line 2
fo.write('text to be ended with a newline command
^
SyntaxError: EOL while scanning string literal
答案 0 :(得分:2)
main.write("fo.write('text to be ended with a newline command\\n')\n")
应该工作...(注意转义\ n命令内部)
(请注意,这是使代码有效的众多方法之一)
答案 1 :(得分:1)
问题是你需要逃避反斜杠。
main.write("fo.write('text to be ended with a newline command\n')\n")
会给你
fo.write('text to be ended with a newline command
')
相反,你应该使用
main.write("fo.write('text to be ended with a newline command\\n')\n")
(注意额外的反斜杠)来获取
fo.write('text to be ended with a newline command\n')
我建议您使用原始字符串,以避免这种问题。原始字符串前面有一个r
字符,它会将任何反斜杠解释为实际的反斜杠而不是转义字符。
作为原始字符串:
main.write(r"fo.write('text to be ended with a newline command\n')\n")
(注意字符串前面的r
)会给你
fo.write('text to be ended with a newline command\n')\n
唯一的问题是你现在最后有一个额外的\n
,你可以通过编写来修复
main.write(r"fo.write('text to be ended with a newline command\n')" + "\n")
这给了你你想要的东西,并且是一个很好的分离代码的方法 - 它应该是一个原始字符串,以避免反斜杠的问题 - 以及每个字符串末尾的换行符。