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


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.