Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Tags:

python

csv

I am reading a csv into 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_chars function is not working.

Is there a better way to do this?

like image 987
Alex Gordon Avatar asked Aug 27 '10 21:08

Alex Gordon


People also ask

Can you replace all occurrences?

To make the method replace() replace all occurrences of the pattern you have to enable the global flag on the regular expression: Append g after at the end of regular expression literal: /search/g. Or when using a regular expression constructor, add 'g' to the second argument: new RegExp('search', 'g')

How do you replace all occurrences of a character in Python?

The replace() method replace() is a built-in method in Python that replaces all the occurrences of the old character with the new character.

How do you replace all occurrences of a string in C++?

In C++, the STL provides a function to replace() to change the contents of an iterable container. As string is a collection of characters, so we can use the std::replace() function to replace all the occurrences of character 'e' with character 'P' in the string.


2 Answers

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.

line[8] = line[8].replace(letter, "")
like image 94
Matti Virkkunen Avatar answered Sep 30 '22 23:09

Matti Virkkunen


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

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]
like image 43
Tony Veijalainen Avatar answered Oct 01 '22 00:10

Tony Veijalainen