Python 如何替换字符串中某个字符的所有出现?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/3588361/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-18 11:51:23  来源:igfitidea点击:

How do you replace all the occurrences of a certain character in a string?

pythoncsv

提问by l--''''''---------''''''''''''

I am reading a csv into a:

我正在将 csv 读入a

import csv
import collections
import pdb
import math
import urllib

def do_work():
  a=get_file('c:/pythonwork/cds/cds.csv')
  a=remove_chars(a)
  print a[0:10]

def get_file(start_file): #opens original file, reads it to array
  with open(start_file,'rb') as f:
    data=list(csv.reader(f))
  return (data)

def remove_chars(a):
  badchars=['a','b','c','d']
  for row in a:
    for letter in badchars:
      row[8].replace(letter,'')
  return a

I would like to replace all occurrences of ['a','b','c','d']in the 8th element of the line with empty string. the remove_charsfunction is not working.

我想['a','b','c','d']用空字符串替换该行第 8 个元素中所有出现的。该remove_chars功能不起作用。

Is there a better way to do this?

有一个更好的方法吗?

采纳答案by Matti Virkkunen

The problem is you're not doing anything with the result of replace. In Python strings are immutable so anything that manipulates a string returns a new string instead of modifying the original string.

问题是你没有对replace. 在 Python 中,字符串是不可变的,因此任何操作字符串的操作都会返回一个新字符串,而不是修改原始字符串。

line[8] = line[8].replace(letter, "")

回答by Tony Veijalainen

I would use the translate method without translation table. It deletes the letters in second argument in recent Python versions.

我会使用没有翻译表的翻译方法。它删除了最近 Python 版本中第二个参数中的字母。

def remove_chars(line):
    line7=line[7].translate(None,'abcd')
    return line[:7]+[line7]+line[8:]

line= ['ad','da','sdf','asd',
        '3424','342sfas','asdfaf','sdfa',
        'afase']
print line[7]
line = remove_chars(line)
print line[7]

回答by robert king

You really should have multiple input, e.g. one for firstname, middle names, lastname and another one for age. If you want to have some fun though you could try:

您确实应该有多个输入,例如一个用于名字、中间名、姓氏,另一个用于年龄。如果您想玩得开心,可以尝试:

>>> input_given="join smith 25"
>>> chars="".join([i for i in input_given if not i.isdigit()])
>>> age=input_given.translate(None,chars)
>>> age
'25'
>>> name=input_given.replace(age,"").strip()
>>> name
'join smith'

This would of course fail if there is multiple numbers in the input. a quick check would be:

如果输入中有多个数字,这当然会失败。快速检查将是:

assert(age in input_given)

and also:

并且:

assert(len(name)<len(input_given))