On Thu, Jun 5, 2008 at 8:06 AM, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote:
>>>> import os >>>> from BeautifulSoup import BeautifulSoup >>>> file = '/home/david/test/stack.html' >>>> html = open(file, 'r') >>>> soup = BeautifulSoup(html) >>>> table = soup.find('table', {'class': 'order_tbl'}) >>>> for row in table.findAll('td', {'class': 'order_tbl_price'}): >>>> for td in row: >>>> price = float(td.contents[1].lstrip(' $')) >>>> td.contents[1].replaceWith('$%0.2f' % (price * 0.85)) > > My question now is do I have to close the html before I write to it, Yes, it's a good idea. > so that: > >>>> html.close() >>>> html = open(file, 'w') >>>> html.write(soup) > Traceback (most recent call last): > File "<stdin>", line 1, in <module> > TypeError: argument 1 must be string or read-only character buffer, > not instance The error message is actually pretty informative. Argument 1 means the argument you are passing to write(). It says it has to be a string or a character buffer. You are passing it 'soup' with is an instance of BeautifulSoup, not a string. The fix is to ask for the soup as a string: html.write(str(soup)) Kent _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor