编写一个将正确输入换行命令的python代码

时间:2013-12-17 18:22:06

标签: python

我正在尝试编写一个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

2 个答案:

答案 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")

这给了你你想要的东西,并且是一个很好的分离代码的方法 - 它应该是一个原始字符串,以避免反斜杠的问题 - 以及每个字符串末尾的换行符。