我写一些文本(其中包括\n
和\t
字符)从一个源文件到一个(文本)文件;例如:
源文件(test.cpp):
/*
* test.cpp
*
* 2013.02.30
*
*/
从源文件中获取并存储在字符串变量中,如下所示test_str = "/*\n test.cpp\n *\n *\n *\n\t2013.02.30\n *\n */\n"
当我写一个文件时
with open(test.cpp, 'a') as out:
print(test_str, file=out)
正在编写时,换行符和制表符被转换为新行和制表符空格(就像test.cpp
拥有它们一样)*,而 * 我希望它们**保持\n
和\t
**就像test_str
变量最初保存它们一样。
有没有一种方法可以在Python中实现这一点,即在不翻译这些“特殊字符”的情况下将其写入文件?
4条答案
按热度按时间wa7juj8i1#
可以使用
str.encode
:这将转义所有Python识别的特殊转义字符。
举个例子:
yi0zb3m42#
使用
replace()
。由于您需要多次使用它,您可能需要查看this。enyaitl33#
我希望它们保持\n和\t,就像
test_str
变量最初保存它们一样。test_str
不包含反斜杠\
+t
(两个字符)。它包含单个字符ord('\t') == 9
(与test.cpp
中的字符相同)。反斜杠在Python字符串字面量中是特殊的,例如,u'\U0001f600'
不是 ten 个字符-它是单个字符😀Don'不要混淆运行时内存中的字符串对象和Python源代码中字符串文字的文本表示。JSON可能是比
unicode-escape
编码更好的替代方案来存储文本(更便携),即用途:而不是
test_str.encode('unicode_escape').decode('ascii')
。回读json:
ppcbkaq54#
将
str.encode
与'unicode_escape'
一起使用(如Jon Clements answer中所示)不是一个好的解决方案,因为它会转义所有Unicode字符,这在与英语以外的任何字符一起使用时会产生不好的结果:正如你所看到的,ASCII以外的任何东西的显示都被转换成了转义字符,这不是预期的行为。但是你可以看到Python控制台没有这个问题,它完美地显示了非ASCII字符。
要实现类似于Python控制台的功能,请使用以下代码:
repr(t)
除了在文本周围添加单引号外,其他都做得很干净,因此我们使用.strip("'")
删除它们。