Как я могу правильно прочитать черные косые черты из файла?

#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() ; они не сохраняются в строке и, следовательно, не нуждаются в «оценке» с помощью print при обычной печати.

Ответ №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, превращая двойные экранирования в одиночные. Необработанная строка используется для предотвращения экранирования, образующего специальные символы.