파이썬에서 특정 위치에 문자열 추가


157

파이썬에서 문자열의 특정 위치에 값을 삽입하는 데 사용할 수있는 함수가 있습니까?

이 같은:

"3655879ACB6"다음 위치에 4 추가 "-""3655-879ACB6"

답변:


272

아니요. 파이썬 문자열은 변경할 수 없습니다.

>>> s='355879ACB6'
>>> s[4:4] = '-'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment

그러나 문자가 삽입 된 새 문자열을 만들 수 있습니다.

>>> s[:4] + '-' + s[4:]
'3558-79ACB6'

9
이에 더하여 음수 지수를 사용하여 오른쪽에서 위치를 얻을 수 있습니다. 예 :s[:-4]
Reuben L.

최신 형식 문자열 용어 사용 : '{0}-{1}'. format (s [: 4], s [4 :])
srock

60

이것은 매우 쉬운 것 같습니다 :

>>> hash = "355879ACB6"
>>> hash = hash[:4] + '-' + hash[4:]
>>> print hash
3558-79ACB6

그러나 함수와 같은 것을 좋아한다면 다음과 같이하십시오.

def insert_dash(string, index):
    return string[:index] + '-' + string[index:]

print insert_dash("355879ACB6", 5)

26

문자열을 변경할 수없는 또 다른 방법은 문자열을 목록으로 바꾸는 것입니다. 그런 다음 슬라이싱 트릭없이 색인화하고 수정할 수 있습니다. 그러나 목록을 문자열로 다시 가져 오려면 .join()빈 문자열 을 사용해야 합니다.

>>> hash = '355879ACB6'
>>> hashlist = list(hash)
>>> hashlist.insert(4, '-')
>>> ''.join(hashlist)
'3558-79ACB6'

이것이 성능과 비교하여 어떻게 확신 할 수는 없지만 다른 솔루션보다 눈이 더 쉽다고 생각합니다. ;-)


7

이것을 달성하는 간단한 기능 :

def insert_str(string, str_to_insert, index):
    return string[:index] + str_to_insert + string[index:]

5

파이썬에서 특정 위치에 문자열을 추가 하는 매우 유용한 방법을 만들었습니다 .

def insertChar(mystring, position, chartoinsert ):
    longi = len(mystring)
    mystring   =  mystring[:position] + chartoinsert + mystring[position:] 
    return mystring  

예를 들면 다음과 같습니다.

a = "Jorgesys was here!"

def insertChar(mystring, position, chartoinsert ):
    longi = len(mystring)
    mystring   =  mystring[:position] + chartoinsert + mystring[position:] 
    return mystring   

#Inserting some characters with a defined position:    
print(insertChar(a,0, '-'))    
print(insertChar(a,9, '@'))    
print(insertChar(a,14, '%'))   

우리는 출력으로 가질 것입니다 :

-Jorgesys was here!
Jorgesys @was here!
Jorgesys was h%ere!

8
왜 문자열의 길이를 계산합니까?
Yytsi

2
어쩌면 그는 색인이 문자열의 길이보다 작은 지 확인하고 싶었을 것입니다 ... 그리고 잊어 버렸습니다.
sce

파이썬은 일반적으로 함수 이름에 밑줄 대 / 소문자를 사용하지만 낙타 대 / 소문자는 사용하지 않습니다.
마이클 베이츠

2

위의 답변은 괜찮다고 생각하지만 예기치 않은 부작용이 있다고 설명합니다.

def insert(string_s, insert_s, pos_i=0):
    return string_s[:pos_i] + insert_s + string_s[pos_i:]

색인 pos_i가 매우 작 으면 (너무 음수) 삽입 문자열이 앞에 붙습니다. 너무 길면 삽입 문자열이 추가됩니다. pos_i가 -len (string_s)와 + len (string_s)-1 사이에 있으면 삽입 문자열이 올바른 위치에 삽입됩니다.


0

f-string을 사용하는 Python 3.6 이상 :

mys = '1362511338314'
f"{mys[:10]}_{mys[10:]}"

준다

'1362511338_314'

-3

많은 인서트를 원한다면

from rope.base.codeanalyze import ChangeCollector

c = ChangeCollector(code)
c.add_change(5, 5, '<span style="background-color:#339999;">')
c.add_change(10, 10, '</span>')
rend_code = c.get_changed()

가져 오는 라이브러리가 어디에서 왔는지 또는 출력물이 무엇인지 명확하지 않습니다.
chrisfs
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.