변수 값을 문자열에 삽입(문자열로 보간)하려면 어떻게 해야 합니까?
는 저는그넣싶다습니고을것▁an다를 넣고 싶습니다.int
의 상태가.string
지금 제가 하고 있는 일은 다음과 같습니다.
num = 40
plot.savefig('hanning40.pdf') #problem line
몇 개의 다른 번호로 프로그램을 실행해야 해서 루프를 하고 싶습니다.그러나 다음과 같이 변수를 삽입하는 것은 효과가 없습니다.
plot.savefig('hanning', num, '.pdf')
파이썬 문자열에 변수를 삽입하려면 어떻게 해야 합니까?
참고 항목
를 사용하려고 한 경우+
숫자를 문자열(또는 문자열 간 등)과 연결하고 오류 메시지를 표시하려면 strand int 개체 연결 방법을 참조하십시오.
파일 경로를 만들려면 부분(예: 폴더 경로, 이름 및 확장명)에서 파일에 대한 전체 경로를 만드는 방법을 참조하십시오.추가적인 기술을 위해.일반적으로 경로를 만드는 데 특정한 코드를 사용하는 것이 좋습니다.
URL을 변수 데이터로 구성하려는 경우 오류가 발생하기 쉽고 필요 이상으로 어렵기 때문에 일반 문자열 형식을 사용하지 마십시오.특수 공구를 사용할 수 있습니다.Python에서 지정된 URL에 매개 변수 추가를 참조하십시오.
SQL 쿼리를 구성하려는 경우 일반 문자열 형식을 사용하지 마십시오. 이 형식은 심각한 보안 위험이 있기 때문입니다.실제 기업들이 매년 막대한 비용을 지출하는 'SQL 주입'의 원인입니다.예를 들어 Python의 SQL 문에서 변수를 사용하는 방법을 참조하십시오.적절한 기술을 위하여.
만약 당신이 원한다면,print
(출력) 문자열, 먼저 이런 식으로 준비할 수 있습니다. 또는 다른 것을 위해 문자열이 필요하지 않은 경우, 단일 호출을 사용하여 출력의 각 부분을 개별적으로 인쇄합니다.print
동일한 줄에 여러 항목(고정 텍스트 및/또는 변수 값)을 동시에 인쇄하는 방법을 참조하십시오.두 가지 접근 방식에 대한 자세한 내용은 다음과 같습니다.
f-string 사용:
plot.savefig(f'hanning{num}.pdf')
이것은 3.6에서 추가되었으며 새로운 선호 방식입니다.
사용:
plot.savefig('hanning{0}.pdf'.format(num))
문자열 연결:
plot.savefig('hanning' + str(num) + '.pdf')
plot.savefig('hanning%s.pdf' % num)
로컬 변수 이름 사용(깔끔한 속임수)
plot.savefig('hanning%(num)s.pdf' % locals())
사용:
plot.savefig(string.Template('hanning${num}.pdf').substitute(locals()))
참고 항목:
Python 3.6에 포맷된 문자열 리터럴("f-strings")이 도입됨에 따라 이제 더 간단한 구문으로 이것을 작성할 수 있습니다.
>>> name = "Fred"
>>> f"He said his name is {name}."
'He said his name is Fred.'
질문에 제시된 예를 사용하면 다음과 같습니다.
plot.savefig(f'hanning{num}.pdf')
plot.savefig('hanning(%d).pdf' % num)
그%
에 올 때 연는문을따열자때를코형통드문를값다수있")를 통해 해당 문자열에 할 수 .%d
은 Python하십시오.자세한 내용은 Python 설명서를 참조하십시오.
사용할 수 있습니다.+
일반적인 문자열 연결 함수뿐만 아니라str()
.
"hello " + str(10) + " world" == "hello 10 world"
일반적으로 다음을 사용하여 문자열을 만들 수 있습니다.
stringExample = "someString " + str(someNumber)
print(stringExample)
plot.savefig(stringExample)
개의 ▁of▁if▁다▁make▁use를 사용하면 됩니다.format
nums = [1,2,3]
plot.savefig('hanning{0}{1}{2}.pdf'.format(*nums))
문자열 " " " "이 됩니다.hanning123.pdf
이 작업은 모든 배열에서 수행할 수 있습니다.
특수한 경우
변수 데이터가 문자열과 함께 사용되는 이유에 따라 범용 접근 방식이 적절하지 않을 수 있습니다.
SQL 조회를 준비해야 하는 경우
문자열을 조립하는 데 일반적인 기술을 사용하지 마십시오.대신 매개 변수화된 쿼리에 SQL 라이브러리의 기능을 사용합니다.
쿼리는 코드이므로 일반 텍스트처럼 생각해서는 안 됩니다.라이브러리를 사용하면 삽입된 텍스트가 제대로 이스케이프되었는지 확인할 수 있습니다.쿼리의 일부가 프로그램 외부에서 발생할 수 있는 경우 악의적인 사용자가 SQL 주입을 수행할 수 있습니다.이것은 중요한 컴퓨터 보안 문제 중 하나로 널리 간주되며, 실제 회사들은 매년 막대한 비용을 지출하고 수많은 고객들에게 문제를 야기합니다.데이터가 "안전"하다는 것을 알고 있다고 생각하더라도, 다른 접근 방식을 사용하는 것에는 실질적인 이점이 없습니다.
구문은 사용 중인 라이브러리에 따라 다르며 이 답변의 범위를 벗어납니다.
URL 쿼리 문자열을 준비해야 하는 경우
Python에서 지정된 URL에 매개 변수 추가를 참조하십시오.스스로 하지 마세요; 여러분의 삶을 더 힘들게 할 실질적인 이유는 없습니다.
파일에 쓰기
하지만, 으로 쓰는 이 더 일 수 ..write
물론 문자열이 아닌 문자열은 쓰기 전에 문자열로 변환해야 하므로 코드가 복잡해질 수 있습니다.여기에 모든 것에 맞는 답은 없지만, 나쁜 선택을 하는 것은 일반적으로 별로 중요하지 않을 것입니다.
단순히 전화하는 경우print
제공되는 트인print
하며, 함는변개인의허임개용고가의하수다체있다의를 사용하여 할 수 .str
문자열 형식 지정을 시도하기 전에 단순히 여러 인수를 전달하는 것이 사용자가 원하는 작업을 수행하는지 여부를 고려할 수도 있습니다.sep
키워드 인수를 사용하여 인수 사이의 간격을 제어합니다.)
# display a filename, as an example
print('hanning', num, '.pdf', sep='')
물론 프로그램이 문자열을 조립하는 것이 유용한 다른 이유가 있을 수 있습니다. 따라서 모든 수단을 동원하여 적절한 곳에서 그렇게 하십시오.
주할점은입니다.print
특별한 경우입니다.이 방식으로 작동하는 유일한 기능은 이러한 방식으로 작동하도록 명시적으로 작성된 기능입니다.은 일적인기방법과, 들어예를과 input
는또.savefig
Matplotlib 플롯의 방법, 우리는 스스로 끈을 준비해야 합니다.
연결
은 Python 사용을 참조하십시오.+
두 문자열 사이에 있지만 문자열과 다른 유형 사이에는 없습니다.이 문제를 해결하려면 다른 값을 문자열로 명시적으로 변환해야 합니다.'hanning' + str(num) + '.pdf'
.
템플릿 기반 접근 방식
문제를 해결하는 대부분의 방법은 정보를 추가해야 하는 위치를 보여주는 "플레이스 홀더"를 포함하는 일종의 "템플릿" 문자열을 가진 다음 누락된 정보를 추가하는 기능 또는 방법을 사용하는 것을 포함합니다.
에프엑스의
이 방법은 가능한 경우 권장되는 접근 방식은 다음과 같습니다.▁like처럼 보입니다.f'hanning{num}.pdf'
삽입할 변수의 이름이 문자열에 직접 나타납니다.주의할 점은 "f-string"과 같은 것이 실제로 존재하는 것은 아니며 별도의 유형이 아니라는 것입니다.대신, Python은 코드를 미리 번역할 것은 다음과 같습니다.
>>> def example(num):
... return f'hanning{num}.pdf'
...
>>> import dis
>>> dis.dis(example)
2 0 LOAD_CONST 1 ('hanning')
2 LOAD_FAST 0 (num)
4 FORMAT_VALUE 0
6 LOAD_CONST 2 ('.pdf')
8 BUILD_STRING 3
10 RETURN_VALUE
특수 구문이기 때문에 다른 접근 방식에서는 사용되지 않는 opcode에 액세스할 수 있습니다.
str.format
이것은 f-string이 불가능할 때 권장되는 접근 방식입니다. 주로 템플릿 문자열을 미리 준비하고 나중에 입력해야 하기 때문입니다.▁like처럼 보입니다.'hanning{}.pdf'.format(num)
또는'hanning{num}.pdf'.format(num=num)'
.여기서,format
문자열에 내장된 메서드로, 위치 또는 키워드로 인수를 수락할 수 있습니다.
특히 의경우의 경우.str.format
내장되어 있다는 것을 아는 것은 유용합니다.locals
,globals
그리고.vars
함수는 변수 이름을 해당 변수의 내용에 매핑하는 사전을 반환합니다.보다는 같것보는다은그는▁thus것.'{a}{b}{c}'.format(a=a, b=b, c=c)
우리는 다음과 같은 것을 사용할 수 있습니다.'{a}{b}{c}'.format(**locals())
포장 풀기locals()
받아쓰기의
str.format_map
이것은 다음과 같은 드문 변형입니다..format
▁like처럼 보입니다.'hanning{num}.pdf'.format_map({'num': num})
키워드 인수를 수락하는 대신 매핑인 단일 인수를 수락합니다.
그것은 아마도 그다지 유용하게 들리지 않을 것입니다 - 결국, 오히려.'hanning{num}.pdf'.format_map(my_dict)
우리는 그냥 쉽게 쓸 수 있었습니다.'hanning{num}.pdf'.format(**my_dict)
그러나 이는 일반적인 매핑이 아닌 즉시 값을 결정하는 매핑에 유용합니다.dict
이 경우, 다음과 같이 포장을 벗습니다.**
할 수 수 . 을 풀려고 수 없습니다. (으: 하을동기했하정리합imagine▁might있다니습▁based수▁is▁keys▁unw: 템플릿을 기반으로 키의 압축을 풀려고 하면 조작이 불가능합니다(예:'hanning{num}.pdf'.format(num=my_mapping[num])
각 자리 표시자에 대한 별도의 인수 포함).
string.Formatter
그string
표준 라이브러리 모듈에 거의 사용되지 않는 라이브러리가 포함되어 있습니다.Formatter
하는 것이 업수처럼 . 사용하는 것은.string.Formatter().format('hanning{num}.pdf', num=num)
템플릿 문자열이 동일한 구문을 다시 사용합니다.이것은 분명히 전화하는 것보다 더 둔탁합니다..format
그를 할 수 있도록 것입니다; 는사용하위분류수할있것허다입니용는하록도현재동기가자▁on.Formatter
템플릿 문자열에 대해 다른 구문을 정의합니다.
방식은 언어"를 "포맷 언어"는 "포맷 언어"입니다.string.Formatter
수 수 은 그 ; 안에 넣을 수 있는 것은 많습니다.{}
작동 방식을 설명하는 것은 이 답변의 범위를 벗어납니다. 설명서를 참조하십시오.그 문자 그대로를 명심하세요.{
그리고.}
캐릭터를 두 배로 늘려서 탈출해야 합니다.구문은 C#에서 영감을 받은 것으로 추정됩니다.
그%
입니다.
이것은 C와 C++에서 영감을 받아 문제를 해결하는 전통적인 방법입니다.오랫동안 단념했지만 여전히 지원되고 있습니다.▁like처럼 보입니다.'hanning%s.pdf' % num
단순한 경우에는예상하신 대로, 문자 그대로'%'
템플릿의 기호를 제거하려면 두 배로 늘려야 합니다.
몇 가지 문제가 있습니다.
변환 지정자(다음 문자)인 것 같습니다.
%
)는 보간되는 모든 유형과 일치해야 하지만 실제로는 그렇지 않습니다.대신 값이 지정된 유형으로 변환된 다음 여기서 문자열로 변환됩니다.일반적으로 이것은 필요하지 않습니다. 문자열로 직접 변환하는 것은 대부분의 경우 작동하며 다른 유형으로 먼저 변환하는 것은 나머지 시간의 대부분에 도움이 되지 않습니다.그렇게's'
항상 사용됩니다, (으)ㄹ 가 없는 한).repr
의값, 용사를 사용하여'r'
에도 불구하고 그럼에도 불구하고 변환 지정자는 구문의 필수 부분입니다.튜플은 특수하게 처리됩니다. 튜플을 오른쪽으로 전달하는 것이 다중 인수를 제공하는 방법입니다.이것은 함수 호출 구문을 사용하지 않기 때문에 필요한 보기 흉한 특수 사례입니다.따라서 튜플을 실제로 단일 자리 표시자로 포맷하려면 튜플을 1-튜플로 묶어야 합니다.
다른 시퀀스 유형은 특별히 처리되지 않으며, 다양한 동작은 gotcha가 될 수 있습니다.
string.Template
그string
표준 라이브러리 모듈에 거의 사용되지 않는 라이브러리가 포함되어 있습니다.Template
class.는 래스클을 합니다. 인스턴스 제공substitute
그리고.safe_substitute
된 본제 방공식유작방과 .format
(safe_substitute
인수가 일치하지 않을 경우 예외를 제기하는 대신 자리 표시자를 그대로 둡니다.이는 또한 문제에 대한 레거시 접근 방식으로 간주되어야 합니다.
▁like처럼 보입니다.string.Template('hanning$num.pdf').substitute(num=num)
전통적인 Perl 구문에서 영감을 받았습니다.그것은 분명히 그것보다 더 투박합니다..format
방법을 사용하기 전에 별도의 클래스를 사용해야 하기 때문에 접근 방식이 필요로 합니다.중괄호){}
는 모호성을 선택적으로 할 수 .는 변수 이름 주위에서 선택적으로 사용할 수 있으므로 모호하지 않습니다.방법들과 , 다방과비슷게하들법, 문그대로자른▁similarly.'$'
탈출을 위해 템플릿을 두 배로 늘려야 합니다.
저는 이것의 확장 버전이 필요했습니다. 문자열에 하나의 숫자를 포함하는 대신 'file1.pdf', 'file2.pdf' 등의 형식의 일련의 파일 이름을 생성해야 했습니다.작동 방식은 다음과 같습니다.
['file' + str(i) + '.pdf' for i in range(1,4)]
문자열에 딕트 및 대체 변수를 만들 수 있습니다.
var = {"name": "Abdul Jalil", "age": 22}
temp_string = "My name is %(name)s. I am %(age)s years old." % var
언급URL : https://stackoverflow.com/questions/2960772/how-do-i-put-a-variable-s-value-inside-a-string-interpolate-it-into-the-string
'programing' 카테고리의 다른 글
Brew 서비스를 통해 실행 중인 Postgres 서버에 연결할 수 없습니다. (0) | 2023.05.16 |
---|---|
정기적으로 사용하는 Xcode 키보드 단축키는 무엇입니까? (0) | 2023.05.16 |
bash 스크립트를 실행하는 도커 진입점이 "권한 거부"를 수신함 (0) | 2023.05.16 |
포스트 그레스 테이블에 데이터 프레임을 쓰는 방법 (0) | 2023.05.16 |
Git에 단계별 변경 사항만 저장하려면 어떻게 해야 합니까? (0) | 2023.05.16 |