On Apr 11, 12:01 am, Jimbo <nill...@yahoo.com> wrote: > Hello, I am getting an error in my python script when I try to change > a character in a string. [b]But I dont know why or what to do to fix > it?[/b] > > I have commented in my code where the error occurs > > [code] > def format_file(filename): > > HTML_file = open(filename,'r') > HTML_source = HTML_file.read() > HTML_file.close() > > x = 0 > > # Format all ID's & classes correctly > temp_buf = HTML_source.lower() > class_occurence = temp_buf.count('class') > ID_occurence = temp_buf.count('id') > > for n in range(class_occurence): > hit = temp_buf.find('class') > if not hit==-1: > temp_buf[hit] = '~' # Error: 'str' object does not support > item assignment > x = hit+5 > > # delete any spaces until we reach a letter or number > while x<temp_buf[x]: > if temp_buf[x] == ' ': > tempbuf[x] = '' > HTML_source[x] = '' > elif temp_buf[x] == '=': > pass > #elif temp_buf[x] == "'" or temp_buf[x] == '"' > isalpha(temp_buf[x]) > else: > break > x += 1 > [/code]
In Python, a string is an immutable (unchangeable) object. You can convert a string into a list of characters (which is not immutable: mylist = list(temp_buf) and then convert it back: temp_buf = ''.join(mylist) but you cannot do item assignments inside the string (and lists don't have a find method, so you cannot use find on your list). You can maintain a parallel list and string if you want (with the same indices). Also, not sure what you want to accomplish with this statement: while x<temp_buf[x]: Do you maybe mean something like: while x < len(temp_buf): This whole approach (character by character processing) is pretty inefficient (which may or may not not matter for your use). There are several HTML parsers available for Python, as well. HTH, Pat -- http://mail.python.org/mailman/listinfo/python-list