tags:

views:

53

answers:

2

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 NOTHING. the remove_chars function is not working.

is there a better way to do this>?

+5  A: 

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, "")
Matti Virkkunen
you are right thanks!!!!!!!!!!!!!!!
I__
A: 

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]
Tony Veijalainen
Function as simple as `remove_chars` should not in general destructively modify value of a global variable.
OTZ
I made the function return the line changed.
Tony Veijalainen