Как удалить NULL-символы из строки в Python? [Дубликат]

Это возможно в Python 2 с помощью

execfile("test2.py")

См. документацию для обработки пространств имен, если это важно в вашем случае.

, вам следует рассмотреть возможность использования другого подхода; ваша идея (из того, что я вижу) выглядит не очень чисто.

62
задан Luiz Berti 14 December 2016 в 07:33
поделиться

8 ответов

Строки в python неизменяемы, поэтому вы не можете рассматривать их как список и присваивать индексы.

Вместо этого используйте .replace() :

line = line.replace(';', ':')

Если вам нужно заменить только определенные точки с запятой, вам нужно быть более конкретным. Вы можете использовать срез, чтобы изолировать секцию строки, которую нужно заменить:

line = line[:10].replace(';', ':') + line[10:]

Это заменит все полуколоны в первых 10 символах строки.

109
ответ дан Martijn Pieters 19 August 2018 в 07:51
поделиться

Если вы заменяете значение индекса, указанное в переменной 'n', попробуйте следующее:

def missing_char(str, n):
 str=str.replace(str[n],":")
 return str
1
ответ дан Bipin Shetty 19 August 2018 в 07:51
поделиться
  • 1
    Проблема с этим решением заключается в том, что он заменит все вхождения символа в позиции n, и апеллянт только захочет заменить это конкретное событие – shivram.ss 2 August 2016 в 15:42
  • 2
    Точно, плохое решение! – Erhard Dinhobl 5 December 2017 в 11:55

Вы не можете просто назначить значение символу в строке. Используйте этот метод для замены значения определенного символа:

name = "India"
result=name .replace("d",'*')

Вывод: In * ia

Кроме того, если вы хотите заменить say * для всех вхождений первого символа кроме первого символа, например. строка = лепетный вывод = ba ** le

Код:

name = "babble"
front= name [0:1]
fromSecondCharacter = name [1:]
back=fromSecondCharacter.replace(front,'*')
return front+back
1
ответ дан Darshan Jain 19 August 2018 в 07:51
поделиться

Вы можете сделать ниже, чтобы заменить любой символ соответствующим символом в данном индексе, если вы не хотите использовать .replace()

word = 'python'
index = 4
char = 'i'

word = word[:index] + char + word[index + 1:]
print word

o/p: pythin
46
ответ дан Dineshs91 19 August 2018 в 07:51
поделиться
  • 1
    Это должен быть принятый ответ, непосредственно отвечает на вопрос. Это самый простой метод, который я нашел до сих пор. – Flare Cat 23 December 2015 в 12:40
  • 2
    Это довольно круто. – Moondra 14 August 2017 в 23:19

Это должно охватывать чуть более общий случай, но вы должны быть в состоянии настроить его для своей цели

def selectiveReplace(myStr):
    answer = []
    for index,char in enumerate(myStr):
        if char == ';':
            if index%2 == 1: # replace ';' in even indices with ":"
                answer.append(":")
            else:
                answer.append("!") # replace ';' in odd indices with "!"
        else:
            answer.append(char)
    return ''.join(answer)

Надеемся, что это поможет

2
ответ дан inspectorG4dget 19 August 2018 в 07:51
поделиться

Как насчет этого:

sentence = 'After 1500 years of that thinking surpressed'

sentence = sentence.lower()

def removeLetter(text,char):

    result = ''
    for c in text:
        if c != char:
            result += c
    return text.replace(char,'*')
text = removeLetter(sentence,'a')
0
ответ дан Matheus Lacerda 19 August 2018 в 07:51
поделиться

Поверните строку в список; то вы можете изменить символы в отдельности. Затем вы можете вернуть его вместе с .join:

s = 'a;b;c;d'
slist = list(s)
for i, c in enumerate(slist):
    if slist[i] == ';' and 0 <= i <= 3: # only replaces semicolons in the first part of the text
        slist[i] = ':'
s = ''.join(slist)
print s # prints a:b:c;d
18
ответ дан nneonneo 19 August 2018 в 07:51
поделиться

Если вы хотите заменить одну точку с запятой:

for i in range(0,len(line)):
 if (line[i]==";"):
     line = line[:i] + ":" + line[i+1:]

, Havent проверил ее, хотя.

4
ответ дан Vic 19 August 2018 в 07:51
поделиться
  • 1
    – inspectorG4dget 4 October 2012 в 10:08
  • 2
    @ inspectorG4dget, вы правы, это быстрое и грязное - одно время - решение. – Vic 4 October 2012 в 10:13
  • 3
    На самом деле, @ inspectorG4dget, не отвечает ли принятый ответ на эту же проблему? – Vic 4 October 2012 в 10:38
  • 4
    line.replace(src,dst) нет. line[:10].replace(src,dst) + line[10:], но в гораздо меньшей степени. Предположим line = ';'*12. Ваше решение построит новую строку 12 раз. Принятое решение будет делать это один раз. – inspectorG4dget 4 October 2012 в 18:43
Другие вопросы по тегам:

Похожие вопросы: