Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

String comparison doesn't seem to work for lines read from a file

Tags:

python

I have a file named test.txt that contains the following:

Line 1
Line 2
Line 3
Line 4

I have simple Python program like this:

f = open("test.txt")

myline = "Line 3"
for line in f:
    print myline + " - " + line
    if myline == line:
        print "We have a match!"

if myline == "Line 3":
    print "This works."

I got this result:

Line 3 - Line 1

Line 3 - Line 2

Line 3 - Line 3

Line 3 - Line 4

This works.

Why doesn't "We have a match!" get printed?

What did I miss?

like image 607
lessthanl0l Avatar asked Feb 13 '14 17:02

lessthanl0l


1 Answers

Why doesn't "We have a match!" get printed? What did I miss?

If you will notice the output on console you are getting double \n (newlines) one because of print second because in file every line has \n at the end. Your file that looks like:

Line 1
Line 2
Line 3
Line 4

is basically: Line 1\nLine 2\nLine 3\nLine 4 (assuming you don't have any extra white spaces e.g. tabs, blank space).

In for loop: for line in f:, end char of line is \n (and line that you think is 'Line 3' is actually 'Line 3\n') Hence your if condition fails.

To remove that \n just use str.strip([chars]); function. The method strip() returns a copy of the string in which all chars have been stripped from the beginning and the end of the string (default whitespace characters).

So, replace if myline == line: by if myline == line.strip() that is what @C.B.'s answer.

like image 77
Grijesh Chauhan Avatar answered Nov 14 '22 22:11

Grijesh Chauhan