#python #file-io
#python #file-io
Вопрос:
Следующий код:
key = open("C:Scriptsprivate.ppk",'rb').read()
считывает файл и присваивает его данные переменной key
.
По какой-то причине обратные косые черты умножаются в процессе. Как я могу убедиться, что они не умножаются?
Ответ №1:
Вы … не делаете. Они экранируются при чтении, чтобы они обрабатывались должным образом при их записи / использовании. Если вы объявляете строки и не хотите удваивать обратные косые черты, вы можете использовать необработанные строки 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. Почему у этого ответа шесть голосов «за»? «Они экранируются при чтении в» — это полная противоположность тому, что происходит. Дополнительные косые черты добавляются с помощью
repr()
; они не сохраняются в строке и, следовательно, не нуждаются в «оценке» с помощью
Ответ №2:
Вам следует прочитать это замечательное сообщение в блоге о python и символе escape с обратной косой чертой.
И при некоторых обстоятельствах, если Python выводит информацию на консоль, вы увидите две обратные косые черты, а не одну. Например, это часть разницы между функцией repr() и функцией str().
Мое имя файла = «c:newprojecttypenames.txt » печать repr(myFilename), str(myFilename) производит
‘c:newprojecttypenames.txt ‘ c:newprojecttypenames.txt
Ответ №3:
Обратные косые черты представлены как экранированные. Вы увидите две обратные косые черты для каждой реальной, существующей в файле, но это нормальное поведение.
Причина в том, что обратная косая черта используется для создания кодов, представляющих символы, которые нелегко представить, такие как новая строка ‘n’ или табуляция ‘ t’.
Ответ №4:
Вы пытаетесь поместить одиночные обратные косые черты в строку? Для строк с обратными косыми чертами требуется экранирующий символ, в данном случае «». Он будет выводиться на экран с одной косой чертой
Ответ №5:
На самом деле есть решение — использование eval
, при условии, что содержимое файла можно заключить в какие-либо кавычки. У меня сработало следующее (ПУТЬ содержит некоторый скрипт, который выполняет Matlab):
MATLAB_EXE = "C:Program Files (x86)MATLABR2012bbinmatlab.exe"
content = open(PATH).read()
MATLAB_EXE in content # False
content = eval(f'r"""{content}"""')
MATLAB_EXE in content # True
Это работает путем оценки содержимого как строкового литерала python, превращая двойные экранирования в одиночные. Необработанная строка используется для предотвращения экранирования, образующего специальные символы.