python의 sprintf와 같은 기능
문자열 버퍼를 만들어 많은 처리와 포맷을 하고 마지막으로 C-style을 사용하여 텍스트 파일에 버퍼를 쓰고 싶습니다.sprintf
Python의 기능입니다.조건문 때문에 파일에 직접 쓸 수 없습니다.
예: 의사 코드:
sprintf(buf,"A = %d\n , B= %s\n",A,B)
/* some processing */
sprint(buf,"C=%d\n",c)
....
...
fprintf(file,buf)
출력 파일에는 다음과 같은 종류의 O/P가 있습니다.
A= foo B= bar
C= ded
etc...
내 질문을 명확히 하기 위해 편집:
buf
는 sprintf를 사용하여 포맷된 모든 문자열을 포함하는 큰 버퍼입니다.당신의 예를 들어보면,buf
이전 값이 아닌 현재 값만 포함됩니다(예: 첫 번째 값buf
나는 썼습니다.A= something ,B= something
이따가C= something
동일한 항목에 추가되었습니다.buf
하지만 당신의 파이썬 답변에서buf
마지막 값만 포함합니다. 원하는 값이 아닙니다. - 원하는 값입니다.buf
모든 것을 가지다printf
나는 처음부터 해왔습니다, 예를 들면.C
.
Python은%
연산자입니다.
>>> a = 5
>>> b = "hello"
>>> buf = "A = %d\n , B = %s\n" % (a, b)
>>> print buf
A = 5
, B = hello
>>> c = 10
>>> buf = "C = %d\n" % c
>>> print buf
C = 10
지원되는 모든 형식 지정자는 이 참조를 참조하십시오.
다음을 사용할 수 있습니다.
>>> print "This is the {}th tome of {}".format(5, "knowledge")
This is the 5th tome of knowledge
제가 당신의 질문을 올바르게 이해했다면, format()은 미니 언어와 함께 당신이 찾고 있는 것입니다.
python 2.7 이상에 대한 어리석은 예:
>>> print "{} ...\r\n {}!".format("Hello", "world")
Hello ...
world!
이전 python 버전의 경우: (2.6.2로 테스트됨)
>>> print "{0} ...\r\n {1}!".format("Hello", "world")
Hello ...
world!
당신의 목표를 완전히 이해할 수 있을지는 모르겠지만, 당신은 그것을 사용할 수 있습니다.StringIO
버퍼로서의 인스턴스:
>>> import StringIO
>>> buf = StringIO.StringIO()
>>> buf.write("A = %d, B = %s\n" % (3, "bar"))
>>> buf.write("C=%d\n" % 5)
>>> print(buf.getvalue())
A = 3, B = bar
C=5
와는 달리sprintf
당신은 그냥 끈을 건네줍니다.buf.write
형식을 지정합니다.%
오퍼레이터 또는format
현악기 연주법
물론 당신은 다음을 얻기 위한 함수를 정의할 수 있습니다.sprintf
원하는 인터페이스:
def sprintf(buf, fmt, *args):
buf.write(fmt % args)
다음과 같이 사용할 수 있습니다.
>>> buf = StringIO.StringIO()
>>> sprintf(buf, "A = %d, B = %s\n", 3, "foo")
>>> sprintf(buf, "C = %d\n", 5)
>>> print(buf.getvalue())
A = 3, B = foo
C = 5
형식 지정 연산자를 사용합니다.
buf = "A = %d\n , B= %s\n" % (a, b)
print >>f, buf
만약 당신이 python3 인쇄 기능과 같은 것을 원하지만 문자열로 원한다면:
def sprint(*args, **kwargs):
sio = io.StringIO()
print(*args, **kwargs, file=sio)
return sio.getvalue()
>>> x = sprint('abc', 10, ['one', 'two'], {'a': 1, 'b': 2}, {1, 2, 3})
>>> x
"abc 10 ['one', 'two'] {'a': 1, 'b': 2} {1, 2, 3}\n"
아니면 없이.'\n'
마지막에:
def sprint(*args, end='', **kwargs):
sio = io.StringIO()
print(*args, **kwargs, end=end, file=sio)
return sio.getvalue()
>>> x = sprint('abc', 10, ['one', 'two'], {'a': 1, 'b': 2}, {1, 2, 3})
>>> x
"abc 10 ['one', 'two'] {'a': 1, 'b': 2} {1, 2, 3}"
문자열 형식을 사용할 수 있습니다.
>>> a=42
>>> b="bar"
>>> "The number is %d and the word is %s" % (a,b)
'The number is 42 and the word is bar'
그러나 이것은 Python 3에서 제거되었으므로 "str.format()"을 사용해야 합니다.
>>> a=42
>>> b="bar"
>>> "The number is {0} and the word is {1}".format(a,b)
'The number is 42 and the word is bar'
매우 긴 문자열에 삽입하려면 올바른 위치에 있기를 바라는 대신 다른 인수에 이름을 사용하는 것이 좋습니다.이렇게 하면 여러 번의 반복을 쉽게 대체할 수 있습니다.
>>> 'Coordinates: {latitude}, {longitude}'.format(latitude='37.24N', longitude='-115.81W')
'Coordinates: 37.24N, -115.81W'
다른 모든 형식 예제에서 가져온 것입니다.Format
관련 답변도 표시됩니다.
이것은 아마도 당신의 C 코드에서 파이썬 코드로 가장 가까운 번역일 것입니다.
A = 1
B = "hello"
buf = "A = %d\n , B= %s\n" % (A, B)
c = 2
buf += "C=%d\n" % c
f = open('output.txt', 'w')
print >> f, c
f.close()
그%
파이썬의 연산자는 C의 연산자와 거의 정확하게 동일한 작업을 수행합니다.sprintf
문자열을 파일로 직접 인쇄할 수도 있습니다.이러한 문자열 형식의 문자열이 많이 포함된 경우에는 다음을 사용하는 것이 좋습니다.StringIO
처리 시간을 단축하는 개체입니다.
ㅠㅠㅠㅠㅠㅠㅠㅜㅜㅜㅜㅜㅜㅜㅜㅜㅠ+=
수행:
import cStringIO
buf = cStringIO.StringIO()
...
print >> buf, "A = %d\n , B= %s\n" % (A, B)
...
print >> buf, "C=%d\n" % c
...
print >> f, buf.getvalue()
나는 이것이 오래된 스레드라는 것을 알고 있지만, 새로운 문자열 보간 "스타일" - f' 문자열 형식 구조가 있습니다.
a = 5
b = "hello"
buf = f"A = {a:d}\n , B = {b}\n"
F-String(일명 F-String)은 PEP-498에 규정되어 있습니다.
F-String을 배우기 전에 다음과 같은 형식으로 전화를 걸겠습니다.
a = 5
b = "hello"
buf = "A = {a:d}\n , B = {b}\n".format( **{ **globals() , **locals() } )
PEP-498 설명서에 따르면 F-String은 Python 3.6 이상에서 사용할 수 있습니다.
뭐랄까...
greetings = 'Hello {name}'.format(name = 'John')
Hello John
두 가지 접근 방식은 문자열 버퍼에 쓰거나 목록에 줄을 쓰고 나중에 조인하는 것입니다.제 생각엔StringIO
접근 방식은 더 파이썬적이지만 Python 2.6 이전에는 작동하지 않았습니다.
from io import StringIO
with StringIO() as s:
print("Hello", file=s)
print("Goodbye", file=s)
# And later...
with open('myfile', 'w') as f:
f.write(s.getvalue())
또한 이러한 기능을 사용할 수 있습니다.ContextMananger
(s = StringIO()
를 )와 함께 사용하고 print
기능. 이는 디버깅이나 요구사항을 할 수 데 할 수 .
class Report:
... usual init/enter/exit
def print(self, *args, **kwargs):
with StringIO() as s:
print(*args, **kwargs, file=s)
out = s.getvalue()
... stuff with out
with Report() as r:
r.print(f"This is {datetime.date.today()}!", 'Yikes!', end=':')
언급URL : https://stackoverflow.com/questions/5309978/sprintf-like-functionality-in-python
'prosource' 카테고리의 다른 글
VBA나 매크로가 없는 SHA256/SHA512 해시를 위한 Excel 공식 기반 기능 (0) | 2023.08.26 |
---|---|
GIT_DISCOVERY_ACROSS_FILESSYSTEM이 설정되지 않음 (0) | 2023.08.26 |
Visual Studio:GIT 플러그인에 대한 리포지토리의 기본 경로 변경 (0) | 2023.08.26 |
폼의 입력 요소 내부에 아이콘 삽입 (0) | 2023.08.26 |
데이터를 json으로 보낼 때 jQuery Form Data의 괄호 문제 (0) | 2023.08.26 |