On 25-Apr-09, at 11:41 PM, Dan Liang wrote:

Hi Bob and tutors,

Thanks Bob for your response! currently I have the current code, but it does not work:

ListLines= []
for line in open('test.txt'):
    line = line.rstrip()
    ListLines.append(line)

for i in range(len(ListLines)):

if ListLines[i].endswith("yes") and ListLines[i +1].endswith("no") and ListLines[i+1].endswith("no"):
        print ListLines[i], ListLines[i+1], ListLines[i+2]
elif ListLines[i].endswith("yes") and ListLines[i +1].endswith("no"):
        print ListLines[i], ListLines[i+1]
        elif ListLines[i].endswith("yes"):
        print ListLines[i]
    elif ListLines[i].endswith("no"):
        continue
    else:
        break

I get the following error:
Traceback (most recent call last):
  File "test.py", line 18, in <module>
if ListLines[i].endswith("yes") and ListLines[i +1].endswith("no") and ListLines[i+1].endswith("no"):
IndexError: list index out of range

You need to put check for

i <= len(ListLines)-2


or you can have a look @ try and except (exception handling in python)

Lines in the file look like following:

    word1 word2 word3 word4 yes
    word1 word2 word3 word4 no
    word1 word2 word3 word4 no
    word1 word2 word3 word4 no
    word1 word2 word3 word4 yes
    word1 word2 word3 word4 no
    word1 word2 word3 word4 yes
    word1 word2 word3 word4 no
    word1 word2 word3 word4 yes
    word1 word2 word3 word4 yes
    word1 word2 word3 word4 no
    word1 word2 word3 word4 no
    word1 word2 word3 word4 no
    word1 word2 word3 word4 yes
    word1 word2 word3 word4 no
    word1 word2 word3 word4 yes
    word1 word2 word3 word4 yes
    word1 word2 word3 word4 no
    word1 word2 word3 word4 no
    word1 word2 word3 word4 no
    word1 word2 word3 word4 no
    word1 word2 word3 word4 yes

> What do we do at steps 4ff if the line does not end in "yes" or "no"?

I forgot to mention that I know for sure that the file has ONLY lines that end in either "yes" or "no".

Any suggestions are appreciated. Also, I feel that my code is not the best way of solving the problem even if the problem of list indices is solved. Is my guess right?



Another suggestion. I would not read all data from file into array (memory). If your file is large, you may hit out of memory error.

regards,
shantanoo

Thank you!

-dan

On Sat, Apr 25, 2009 at 10:32 AM, bob gailer <bgai...@gmail.com> wrote:
Dan Liang wrote:
Dear Tutors,


I have a file from which I want to extract lines that end in certain strings and print to a second file. More specifically, I want to:

1) iterate over each line in the file, and if it ends in "yes", print it. 2) move to the line following the one described in #1 above, and if it ends in, "no" print it.
3) move to third line, and if it ends in "no", print it.
4) move to fourth line, and if it ends in "no" discard it, but if it ends in "yes" repeat 1, 2, and 3 above. 5) move to fifth line, and if it ends in "no" discard it, but if it ends in "yes" repeat 1, 2, 3, and 4 above, and so on.

The goal is to get a ratio of 1 to 2 "yes" to "no" lines from a file in such a way that keeps the order of the lines in output. An abstraction away from this so that any ratio of "yes" to "no" lines could be printed while keeping the order of the original lines would be great.

Please show us what code you have written, and in what way it fails to meet your expectations.

Your specification is IMHO a nice piece of pseudocode which could translate to Python fairly easily!

What do we do at steps 4ff if the line does not end in "yes" or "no"?

If you have not written any code make a stab at it. You could start by asking "how in Python does one":
open a file?
iterate (loop)?
get the next line from a file?
test for equality?
examine the end of a string?


--
Bob Gailer
Chapel Hill NC
919-636-4239

_______________________________________________
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor

_______________________________________________
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor

Reply via email to