lists + string
ian
iwaters at btclick.com
Fri May 10 14:40:11 EDT 2002
Hehe :)
thanks thats perfect
"Steve Holden" <sholden at holdenweb.com> wrote in message
news:mqTC8.61300$m26.48333 at atlpnn01.usenetserver.com...
> "ian" <iwaters at btclick.com> wrote in message
> news:unSC8.57436$oK4.103913 at NewsReader...
> > cheers for the quick response
> > what im doing is reading a line from a file
> > then appending it to my wordlist list.
> > how would i do it knowing this???
> >
> > word = str(raw_input("Enter word to remove: "))
> >
> > wordlist = []
> > spamfile = file('spam.txt','r',1024)
> >
> Generally speaking you can do without the size hints, so
>
> spamfile = file("spam.txt", "r")
>
> would do here (and you can even miss off the "r" at a pinch).
>
> > while 1:
> > line = spamfile.readline(1024)
> > if line == '':break
> > wordlist.append(line)
> > spamfile.close()
> >
> Watch that indentation! The difference bettwen 5 leading spaces and 6 is
> obvious to the interpreter, but it makes itr difficult for old crocks like
> me. 4 spaces per indentation level is nowadays considered acceptable.
>
> So, you're building a list of words from the file. Note that these words
> have newlines at the end of them because they have been read from a
file...
> you can strip these off by saying something like
>
> line = spamfile.readline().rstrip()
>
> The readline() file method returns a string, which therefore has an
rstrip()
> method to remove trailing whitespace.
>
> If you're happy about the newlines then you could just say
>
> wordlist = spamfile.readlines()
>
> and pull the whole thing in with a single statement!
>
> > #write back file
> > #spamfile = file('spam.txt','w+',1024)
> > print "word list"
> > for x in wordlist:
>
> Of course here you aren't taking the newlines into account. Because you
> didn't open the file in binary mode (sensible decision) Python guarantees
> that the line terminator is a line feed ('\n').
>
> So probably the easiest thing would have been to add a newline to the word
> you read in from the user.
>
> > print x
> > if x == word:print 'found'
> > #spamfile.write(x)
> > #spamfile.close()
> >
> [...]
> So your program would become something like:
>
> word = str(raw_input("Enter word to remove: "))+"\n"
> spamfile = file('spam.txt','r',1024)
> wordlist = =spamfile.readlines()
> spamfile.close()
>
> #write back file
> spamfile = file('spam.txt','w+',1024)
> print "word list"
> for x in wordlist:
> print x
> if x == word:
> print 'found and removed'
> else:
> spamfile.write(x)
> spamfile.close()
>
> Hope this will be an iluminating contrast with your initial effort. You
had
> a lot ofthe logic correct, but not knowingf the details of the I/O
subsystem
> stood in your way. It was also a gaff to miss out the "else" in the
> conditional: without it, everything gets written back to the spam file. In
> that case, there's no point rewriting it, you could have just left it as
it
> was.
>
> Tell your professor I'd like at least a "B" for this, please ;-)
>
> regards
> Steve
> --
> -----------------------------------------------------------------------
> Steve Holden http://www.holdenweb.com/
> Python Web Programming http://pydish.holdenweb.com/pwp/
> -----------------------------------------------------------------------
>
>
>
>
>
More information about the Python-list
mailing list