partida
partida

Reputation: 501

What's happened in endswith function in Python?

I have a file,namedtest.txt

182.7 100.0
182.6 100.0
182.8 100.0

I want to sure weather the line ends with the digits 100.0: So I use the following code:

for line in open('test.txt','rt'):
    print repr(line),line.endswith('100.0\n')
    print

But the Output in Ubuntu is:

'182.7 100.0\r\n' False

'182.6 100.0\r\n' False

'182.8 100.0' False

But the Output in windows server 2008 is:

'182.7 100.0\n' True

'182.6 100.0\n' True

'182.8 100.0' False

I already using rt in open function,so why there is difference between different systems yet?

Upvotes: 0

Views: 196

Answers (2)

Carlos Monroy Nieblas
Carlos Monroy Nieblas

Reputation: 2283

The function strip() can take care of the ending new line character, and it is independent of the operating system used, the code can be

print "{line} {expr}".format(line=repr(line), expr=line.rstrip().endswith('100.0'))

Upvotes: 3

Tim Peters
Tim Peters

Reputation: 70725

Thanks! Is the answer obvious now? The file was created on Windows, where lines end with "\r\n", not with "\n". So long as you read the file on Windows in text mode, Python can hide that from you. But you read the file on Linux, where the distinction between "text" and "binary" modes doesn't exist, and you get exactly whatever bytes are in the file.

My advice is to force line ends to the native convention on whatever platform you move files to. Short of that, in Python 2 you can open files in "universal newline mode" instead, as briefly explained here.

Upvotes: 2

Related Questions