IT이야기

파이썬 문자열 리터럴에서 백 슬래시 인용

cyworld 2021. 3. 29. 21:15
반응형

파이썬 문자열 리터럴에서 백 슬래시 인용


파이썬에서 변수로 설정하려는 큰 따옴표와 백 슬래시를 모두 포함하는 문자열이 있습니다. 그러나 설정하려고 할 때마다 따옴표 또는 슬래시가 제거되거나 이스케이프됩니다. 예를 들면 다음과 같습니다.

>>> foo = 'baz "\"'
>>> foo
'baz ""'

그래서 baz "\"내가 원하는 대신에 baz "". 그런 다음 백 슬래시를 이스케이프하려고해도 도움이되지 않습니다.

>>> foo = 'baz "\\"'
>>> foo
'baz "\\"'

이제 내가 넣은 것과 일치하지만 원래 원했던 것이 아닙니다. 이 문제를 어떻게 해결합니까?


당신은 산출물에 의해 오도되고 있습니다. 당신이 취하는 두 번째 접근법은 실제로 당신이 원하는 것을하고, 당신은 그것을 믿지 않습니다. :)

>>> foo = 'baz "\\"'
>>> foo
'baz "\\"'
>>> print foo
baz "\"

덧붙여서, 좀 더 명확한 또 다른 문자열 형식이 있습니다.

>>> print r'baz "\"'
baz "\"

원시 문자열을 사용하십시오.

>>> foo = r'baz "\"'
>>> foo
'baz "\\"'

잘못 보이지만 실제로는 옳습니다. 문자열에는 백 슬래시가 하나만 있습니다 foo.

이것은 foo프롬프트에 입력하면 파이썬 __repr__()이 문자열에 결과를 표시하기 때문에 발생 합니다. 이로 인해 다음이 발생합니다 (백 슬래시가 하나만 있고 printed 문자열 주위에 따옴표가 없음 ).

>>> foo = r'baz "\"'
>>> foo
'baz "\\"'
>>> print foo
baz "\"

그리고 더 많은 백 슬래시 트릭이 있기 때문에 계속합시다. 문자열 끝에 백 슬래시가 있고 위의 방법을 사용하려면 문제가 발생합니다.

>>> foo = r'baz \'
  File "<stdin>", line 1
    foo = r'baz \'
                 ^  
SyntaxError: EOL while scanning single-quoted string

그렇게하면 원시 문자열이 제대로 작동하지 않습니다. 일반 문자열을 사용하고 백 슬래시를 이스케이프해야합니다.

>>> foo = 'baz \\'
>>> print foo
baz \

그러나 Windows 파일 이름으로 작업하는 경우 약간의 고통이 있습니다. 원하는 것은 슬래시와 os.path.normpath()함수를 사용하는 것입니다.

myfile = os.path.normpath('c:/folder/subfolder/file.txt')
open(myfile)

이것은 많은 탈출과 머리카락을 찢을 수 있습니다. 이 페이지 는 얼마 전에 이것을 다룰 때 편리했습니다.


마지막 요점을 제외하고 할리가 말한 것-실제로 open을 호출하기 전에 '/'를 '\'로 변경할 필요는 없습니다. Windows는 슬래시가있는 경로를 허용하는 것이 매우 기쁩니다.

infile = open('c:/folder/subfolder/file.txt')

normpathed 문자열이 필요할 가능성이있는 유일한 경우는 쉘을 통해 다른 프로그램으로 전달하는 경우입니다 ( os.system또는 subprocess모듈 사용).


백 슬래시로 문자열을 끝내는 또 다른 방법은 백 슬래시와 공백으로 문자열을 끝내고 문자열에서 .strip()함수 를 호출하는 것입니다.

두 개의 문자열 변수를 연결하고 백 슬래시로 구분하여 다음을 사용했습니다.

newString = string1 + "\ ".strip() + string2

ReferenceURL : https://stackoverflow.com/questions/301068/quoting-backslashes-in-python-string-literals

반응형