以下代码:
key = open("C:\Scripts\private.ppk",'rb').read()
读取文件并将其数据分配给var key
。
出于某种原因,反斜杠在此过程中成倍增加。我如何确保它们不会成倍增加?
答案 0 :(得分:8)
你......不。它们在读入时会被转义,以便在写出/使用时能够正确处理。如果你要声明字符串并且不想加倍反斜杠,则可以使用原始字符串r'c:\myfile.txt'
,但这并不适用于您正在读取的文件的内容。
>>> s = r'c:\boot.ini'
>>> s
'c:\\boot.ini'
>>> repr(s)
"'c:\\\\boot.ini'"
>>> print s
c:\boot.ini
>>>
正如您所看到的,额外的斜杠存储在内部,但是当您在print语句中使用该值(写入文件,测试值等)时,它们会被正确评估。
答案 1 :(得分:4)
你应该在python and the backslash escape字符上阅读这篇精彩的博文。
在某些情况下,如果 Python将信息打印到 控制台,你会看到两个 反斜杠而不是一个。对于 例如,这是其中的一部分 repr()函数之间的区别 和str()函数。
myFilename = “c:\ newproject \ typenames.txt”打印 repr(myFilename),str(myFilename) 产生
'C:\ newproject \ typenames.txt' C:\ newproject \ typenames.txt
答案 2 :(得分:1)
其实有一个解决方案——使用eval
,只要文件内容可以被某种形式的引号包裹起来即可。以下对我有用(PATH 包含一些执行 Matlab 的脚本):
MATLAB_EXE = "C:\Program Files (x86)\MATLAB\R2012b\bin\matlab.exe"
content = open(PATH).read()
MATLAB_EXE in content # False
content = eval(f'r"""{content}"""')
MATLAB_EXE in content # True
这通过将内容评估为 python 字符串文字来工作,使双转义转换为单个转义。原始字符串用于防止转义形成特殊字符。
答案 3 :(得分:0)
反斜杠表示为转义。你会看到文件中存在的每个真正的两个反斜杠,但这是正常的行为。
原因是反斜杠用于创建代表无法轻易表示的字符的代码,例如新行'\ n'或tab'\ t'。
答案 4 :(得分:0)
您是否尝试将单个反斜杠放入字符串中?带有反斜杠的字符串需要和转义字符,在本例中为“\”。它将使用单斜杠
打印到屏幕上