On Feb 9, 9:13 pm, Chris Rebert <c...@rebertia.com> wrote: > On Tue, Feb 10, 2009 at 2:03 AM, Joel Ross <jo...@cognyx.com> wrote: > > Hi all, > > > I have this piece of code: > > ######################################################################### > > > wordList = "/tmp/Wordlist" > > file = open(wordList, 'r+b') > > Why are you opening the file in binary mode? It's content is text! > > > > > def readLines(): > > > for line in file.read(): > > .read() reads the *entire* file into a string. When you iterate over a > string, such as in a for-loop, you get *individual characters*, > whereas you appear to want lines of text. To go line-by-line, use `for > line in file` instead (note: `line` will include the trailing newline > at the end of each line). > And don't use `file` as a variable name; it shadows the name of the > buitlin type. >
Changed as suggested above, with further comments: wordList = "/tmp/Wordlist" f = open(wordList, 'r') def readLines(): ## There is no point in putting the next four lines ## inside a function if you are going to call the ## function (a) immediately and (b) once only. ## All it does is provide scope for unwanted complications. for line in f: line = line.rstrip('\n') print line + '.com ' ## Complications like this next line; why is it returning "line"?? ## And why is it indented like that? ## It will cause only the first line to be read. return line ## Maybe you you meant it to be here: return ## But then it's redundant because a function returns anyway ## when flow of control would fall off the bottom. readLines() f.close() HTH, John -- http://mail.python.org/mailman/listinfo/python-list