2009-02-03 2 views
3

Будет ли это работать на всех платформах? Я знаю, что Windows делает \ r \ n, и помните, что слух mac работает \ r, а linux - \ n. Я запустил этот код в окнах, чтобы он выглядел нормально, но знаете ли кто-нибудь из его кросс-платформу?строки для чтения питона w/o n?

while 1: 
    line = f.readline() 
    if line == "": 
     break 
    line = line[:-1] 
    print "\"" + line + "\"" 
+1

OS X использует \ n - это была только мерзость, которая была «классикой», которая делала \ r. –

+0

Любая строка, заканчивающаяся (включая юникодные), автоматически переводится в \ n. –

+0

-1: устаревшая информация о MacOS. –

ответ

13

Прежде всего, есть universal newline support

Второе: просто использовать line.strip(). Используйте line.rstrip('\r\n'), если вы хотите сохранить пробелы в начале или конце строки.

О, и

print '"%s"' % line 

или по крайней мере

print '"' + line + '"' 

может выглядеть немного лучше.

Вы можете перемещаться по строкам в файле, как это (это не сломается на пустые строки в середине файла, как ваш код):

for line in f: 
    print '"' + line.strip('\r\n') + '"' 

Если ваш входной файл достаточно мал, вам можно использовать тот факт, что str.splitlines отбрасывает окончания строк по умолчанию:

with open('input.txt', 'rU') as f: 
    for line in f.read().splitlines(): 
     print '"%s"' % line 
+1

Это приведет к удалению всех ведущих и завершающих пробелов, а не только окончания строки. –

+0

+1: открыть (файл, «rU») для универсальной новой строки. –

+0

краткий, полный, пункт. – chryss

4

Попробуйте вместо этого:

line = line.rstrip('\r\n') 
0

линия = линия [: - 1]

линия не может иметь никакого завершающего символа новой строки, если это последняя строка файла.

Как было предложено выше, попробуйте универсальные новые линии с помощью rstrip().

Смежные вопросы