【问题标题】:How do you replace all the occurrences of a certain character in a string?如何替换字符串中某个字符的所有出现?
【发布时间】:2011-04-05 00:57:29
【问题描述】:

我正在将 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

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

有没有更好的方法来做到这一点?

【问题讨论】:

  • 第 8 个元素是 line[7],因为索引从 0 开始。

标签: python csv


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    我会使用没有翻译表的翻译方法。它会删除最近 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]
    

    【讨论】:

    • remove_chars 这样简单的函数通常不应破坏性地修改全局变量的值。
    • 我让函数返回更改的行。
    • 谢谢 - 效率更高,但仅供参考,如 stackoverflow.com/questions/11692199/… 中所述,translate 方法与 unicode 字符串的工作方式不同。因此,如果您只使用一个字符,replace 可能对字符串和 unicode 都有效。
    【解决方案3】:

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

    >>> 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'
    

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

    assert(age in input_given)
    

    还有:

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

    【讨论】:

      猜你喜欢
      • 2011-02-23
      • 1970-01-01
      • 2012-08-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-19
      相关资源
      最近更新 更多