공백으로 파이썬 문자열을 채우려면 어떻게해야합니까?


508

공백으로 문자열을 채우고 싶습니다. 나는 다음이 0에 대해 작동한다는 것을 알고 있습니다.

>>> print  "'%06d'"%4
'000004'

그러나 이것을 원할 때 어떻게해야합니까? :

'hi    '

물론 문자열 길이를 측정하고 할 수 str+" "*leftover는 있지만 가장 짧은 방법을 원합니다.


1
앞으로는 더 이상 사용되지 않을 수 있음을 알고 있지만 "%-6s" % s왼쪽 정렬 및 "%6s" % s오른쪽 정렬에 대한 이 오래된 방법을 여전히 좋아합니다 .
Basj

답변:


699

당신은 이것을 할 수 있습니다 str.ljust(width[, fillchar]):

길이가 width 인 문자열에 왼쪽 정렬 된 문자열을 반환합니다 . 패딩은 지정된 fillchar을 사용하여 수행됩니다 (기본값은 공백). width가보다 작은 경우 원래 문자열이 반환됩니다 len(s).

>>> 'hi'.ljust(10)
'hi        '

18
@simon의 대답은 더 복잡한 문자열을 형식화 할 때 더 유연하고 유용합니다
CoatedMoose

3
또는 @abbot의 경우 이전 버전의 파이썬을 지원하지 않으면
CoatedMoose

1
ljust ()는 더 이상 사용되지 않습니다. 참조 stackoverflow.com/questions/14776788/...을 그것을 할 수있는 올바른 방법을
Mawg는 분석 재개 모니카 말한다

파이썬 3에 들어갔습니까? 단지 똑같은 방식으로 작동하지만 다른 정렬을 위해 조정과 중심이 있음을 추가하고 싶었습니다
radtek

17
ljust (), rjust ()는 문자열 모듈에서만 사용되지 않습니다. str 내장 유형으로 제공됩니다.
Rohan Grover 2016 년

372

복잡한 문자열을 포맷 할 때도 작동하는 유연한 방법을 사용하려면 두 방법 중 하나를 사용하여 문자열 포맷 미니 언어를 사용해야합니다.str.format()

>>> '{0: <16} StackOverflow!'.format('Hi')  # Python >=2.6
'Hi               StackOverflow!'

F-문자열

>>> f'{"Hi": <16} StackOverflow!'  # Python >= 3.6
'Hi               StackOverflow!'

11
변수에 '16'이 있으면 어떻게됩니까?
랜디

나도 알아 냈다. 게시해야합니다. 문서는 이것이 Py2.6에서 작동해야한다고 말하지만 내 결과는 그렇지 않습니다. Py2.7에서 작동합니다.
랜디

1
국가 악센트를 사용할 때 이러한 형식의 형식에 문제가있었습니다. 당신은 'kra'와 'krá'가 같기를 원하지만 그렇지 않았습니다.
quapka

77
@Randy'{message: <{fill}}'.format(message='Hi', fill='16')
CivFan

19
str.format()하나만 포함 된 템플릿 에는 사용하지 마십시오 {...}. format()함수를 사용하고 구문 분석 오버 헤드를 저장하십시오 format('Hi', '<16').
Martijn Pieters

119

new (ish) 문자열 형식 메소드를 사용하면 중첩 된 키워드 인수로 재미있는 작업을 수행 할 수 있습니다. 가장 간단한 경우 :

>>> '{message: <16}'.format(message='Hi')
'Hi             '

16변수 로 전달하려면 다음 을 수행하십시오.

>>> '{message: <{width}}'.format(message='Hi', width=16)
'Hi              '

전체 키트 및 kaboodle 에 변수를 전달 하려면 다음을 수행하십시오 .

'{message:{fill}{align}{width}}'.format(
   message='Hi',
   fill=' ',
   align='<',
   width=16,
)

어떤 결과를 얻었습니까?

'Hi              '

다양한 메시지를 어떻게 처리 하시겠습니까? msgs = [ 'hi', 'hello', 'ciao']
ak_slick

1
@ak_slick 하드 코딩 된 값 대신 변수를 형식 함수에 전달할 수 있습니다.
CivFan

80

당신은 이것을 시도 할 수 있습니다 :

print "'%-100s'" % 'hi'

" '% -6s'"% 'hi'를 실제로 인쇄하십시오 !!
테이퍼

8
@ simon 누군가가 python2.5 시스템에 붙어있는 것처럼이 답변은 도움이되지는 않았습니다. +1
sunshinekitty

18
3.3+에서 더 이상 사용되지 않음
Seppo Erviälä

3
이 일반적인 printf 구문이 훨씬 좋습니다. 수많은 연결없이 복잡한 문자열을 작성할 수 있습니다.
Max Tsepkov

4
완전성 "'%+100s'" % 'hi'을 위해 오른쪽에 공백을 넣는 작업'hi'
Eric Blum

62

이를 수행하는 올바른 방법은 공식 문서에 설명 된대로 Python의 형식 구문을 사용하는 것입니다

이 경우 간단히 다음과
'{:10}'.format('hi')
같이됩니다.
'hi '

설명:

format_spec ::=  [[fill]align][sign][#][0][width][,][.precision][type]
fill        ::=  <any character>
align       ::=  "<" | ">" | "=" | "^"
sign        ::=  "+" | "-" | " "
width       ::=  integer
precision   ::=  integer
type        ::=  "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"

당신이 알아야 할 거의 모든 것이 있습니다 ^.

업데이트 : Python 3.6부터 리터럴 문자열 보간으로 훨씬 편리합니다!

foo = 'foobar'
print(f'{foo:10} is great!')
# foobar     is great!

37

사용 str.ljust():

>>> 'Hi'.ljust(6)
'Hi    '

당신은 또한 고려해야합니다 string.zfill(), str.ljust()그리고 str.center()문자열 서식합니다. 이들은 연결될 수 있으며 ' fill '문자가 지정되어 있습니다.

>>> ('3'.zfill(8) + 'blind'.rjust(8) + 'mice'.ljust(8, '.')).center(40)
'        00000003   blindmice....        '

이러한 문자열 형식화 작업 은 Python v2 및 v3에서 작업하는 이점이 있습니다.

pydoc str언젠가 살펴보십시오 . 거기에는 좋은 것들이 풍부합니다.


27

Python 3.6부터는 할 수 있습니다.

>>> strng = 'hi'
>>> f'{strng: <10}'

리터럴 문자열 보간 .

또는 패딩 크기가 다음과 같이 변수에있는 경우 (@Matt M. 덕분에) :

>>> to_pad = 10
>>> f'{strng: <{to_pad}}'

4
f'{strng: >10}'앞에 공백을 10의 길이로 채우는 데 사용합니다. 그것은 마술입니다. 그리고 그것은 잘 문서화되어 있지 않습니다.
Chang Ye

@changye 나는 이것이 또한 기본 동작이라고 생각합니다 f'{strng:10}'.
WAF

17

문자열을 중앙에 놓을 수도 있습니다 .

'{0: ^20}'.format('nice')

7

문자열에 Python 2.7의 미니 형식을 사용하십시오 .

'{0: <8}'.format('123')

왼쪽이 정렬되고 ''문자로 8자를 채 웁니다.


4
@simon은 이미이 답변을주었습니다 ... 왜 중복 답변을 게시합니까?
Felix Kling

5
'새 답변이 게시되었습니다. 새로 고침하려면 클릭하세요'를 클릭하지 않아 놓쳤습니다.
aodj


2

슬라이싱을 사용하는 것이 더 파이썬 적이 지 않습니까?

예를 들어, 10 자 길이가 될 때까지 오른쪽에 공백이있는 문자열을 채우려면 :

>>> x = "string"    
>>> (x + " " * 10)[:10]   
'string    '

15 자 길이가 될 때까지 왼쪽에 공백으로 채우려면 :

>>> (" " * 15 + x)[-15:]
'         string'

물론 얼마나 오래 패딩하고 싶은지 알아야하지만, 시작하는 줄의 길이를 측정 할 필요는 없습니다.


9
아닙니다.
Mad Physicist

1
그것에 대해 자세히 설명해 주시겠습니까? 나는 당신을 믿지 않는 것이 아니라 단지 이유를 이해하고 싶습니다.
Zev Chonoles

4
확실한. 가장 파이썬적인 방법은 가능한 자체 개발 솔루션을 사용하는 대신 내장 함수 중 하나를 사용하는 것입니다.
Mad Physicist

당신이 말처럼 내장 기능에서 사용해야하기 때문에 그 슬라이스를 말하는 것은 덜 파이썬입니다 @MadPhysicist ''.join(reversed(str))보다 파이썬이며 str[::-1], 우리 사실이 아니에요 모두 알고.
Nick

@NickA. 그것은 아주 좋은 비유가 아닙니다. 예제로 사용하는 경우는 상당히 유효합니다. 그러나 (x + " " * 10)[:10]내 의견으로는을 사용하는 것보다 훨씬 복잡 x.ljust(10)합니다.
Mad Physicist

0

다양한 인쇄 형식 대신 사용하는 좋은 방법 :

(1) 오른쪽에 공백이있는 패드 :

('hi' + '        ')[:8]

(2) 왼쪽에 선행 0이있는 패드 :

('0000' + str(2))[-4:]

1
어떤 이유로 이것은 가장 재미있는 답변이지만 나는 그것을 좋아합니다. : 그 라인을 따라도 고려 min_len = 8('hi' + ' '*min_len)[:min_len]또는('0'*min_len + str(2))[-min_len]
Poikilos

1
이 숫자 ('0'*min_len + str(2))[-min_len:]는 재미를 위해서 일 뿐이지 만 다른 대답을 권장합니다.
Poikilos

-1

당신은리스트 이해를 사용하여 그것을 할 수 있습니다.

"hello" + " ".join([" " for x in range(1,10)])
output --> 'hello                 '

... 그리고 당신은 긴 22 (렌 ( "안녕하세요") + (17) :() 자 문자열을 얻을 - 잘되지 않은 것을 우리가 재미되는 동안 우리가 할 수 있습니다. s = "hi"; s + (6-len(s)) * " "대신 (이 때 괜찮습니다 그러나 정확한 문제를 해결하는 프레임 워크 기능을 사용하는 답변은 유지하기가 더 쉬울 것입니다 (다른 답변 참조)
Poikilos
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.