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?
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
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 1nLine 2nLine 3nLine 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 3n') 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.
Method 2
Strip the newline character:
for line in f:
print myline + " - " + line
if myline == line.strip():
print "We have a match!"
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0