在将字符串写入文本文件之前,我按照以下代码准备字符串:
text = my_dict['key']
# Ensure text is utf-8 formatted
safe_text = text.encode('utf-8', errors='ignore')
# Escape any \ issues
safer_text = str(safe_text).replace('\\', '\\\\').replace('"', '\\"')
# Write to .txt file
text_file = open("Data/output.txt", "w")
text_file.write(safer_text)
我知道\
是特殊字符的转义符,所以我解释为safe_text
(表示文件路径)中的\\
将被{\\"
替换{.replace('"', '\"')
而不是{\\
和"
的safe_text
直接写入output.txt
(即跳过safer_text
的步骤)?在
谢谢。在
"
可以转义,但是如果它在一个由'
包围的字符串中,而不是{\"
和{这样,像
'\''
这样的字符串等价于双引号的等价物"\'"
。如果这不是真的,字符串的内容可能会根据它是单引号还是双引号而改变,这至少是不可取的。在至于你的第二个问题,如果不看一下你的文件格式,我就不能肯定,因为有些格式需要转义某些字符。当然,它可以是任何格式,因为扩展名是
.txt
。这取决于代码的作者希望如何读取数据。在实际上,所有这些转义只有在最终文本文件的使用情况下才有意义。在
如果只是存储纯文本,这些都没有意义。在
在python源代码中键入字符串文本(即}(注意
'
或"
分隔“.py”文件中实际程序文本中的字符串)时,需要使用任何\
的转义和额外转义。这是因为在将“.py”文件中的文本编译为字节码(“pyc”文件中的内容)时,编译器希望知道您是指换行符-当字符串中有“\n”或两个字符序列、反斜杠和字母“n”时,您必须键入"\\n"
或{r
前缀)。在超过这一点,所有的字符串都是计算机内存中的数据,并且字符串包含字符-由于转义而进行的任何转换都已经发生。Python将转换返回,也就是说,如果打印出字符串的
repr
,则打印出额外的转义反斜杠(但如果只将其打印为字符串,则不会打印)。在如果将此数据存储到文本文件中,则通过文本编码对其进行编码,在本例中为“utf-8”—但在将文本从文件读回Python程序时,转义符将不适用-文件中的字节将被解码,而字符将再次成为内存中的数据。在
因此,对于程序中字符串文本中的}序列,Python只会做一些显而易见的事情,在一个特定的ca中,显而易见的是“尽其所能地逃跑”,即使这很可怕。:-)
\'
或{简单的一点是,任何非原始字符串文本中的}。(原始字符串是以}和{}都是表示字符串文本中完全相同的字符的方法。在
\'
或\"
始终只意味着引号字符'
和{r"
或r'
开头的字符串。当字符串用另一种引号或任何类型的三重引号括起来时,就不需要这种转义了——对于语言解析器来说,它是多余的,因为乍一看对人类来说是多余的。所以,这就是显而易见的好的部分:' "apples" '
和{我前面提到的“丑陋”是指原始弦的特殊性。在原始字符串中,几乎所有“\”字符的出现都是按字面意思处理的,不会发生转义。但是有两个异常:即使在原始字符串中,序列
\'
和\"
也是引号字符的转义序列。在原始字符串中出现的所有其他“\”都是按字面意思理解的。这意味着在Python代码中不可能只使用\
字符来结束原始字符串文本(这对于在程序代码中键入Windows文件路径的人来说是相当不幸的):r"C:\Program Files\"
是一个“未终止的字符串文本”。键入this的方法之一是dor"C:\Program Files" "\"
,因为相邻的字符串文本(raw或not)在编译时作为单个字符串连接起来。在但是,所有这些关于转义引号的离题说法只适用于源Python文件中的文本,而要用作数据的txt文件根本不需要任何转义。在
TL;TR:只有当您直接生成Python代码文本文件,或者生成具有类似转义需求的另一种语言的代码时,才应该转义这些字符。否则,这只会损坏您的数据与额外的字符。在
相关问题 更多 >
编程相关推荐