Почему не работает .rstrip('\n')?

Скажем, doc.txt содержит

a
b
c
d

и что мой код

f = open('doc.txt')
doc = f.read()
doc = doc.rstrip('\n')
print doc

почему я получаю те же значения?

Ответ 1

str.rstrip() удаляет конечную новую строку, а не все строки новой строки посередине. В конце концов, у вас есть одна длинная строка.

Используйте str.splitlines(), чтобы разделить документ на строки без символов новой строки; вы можете присоединиться к нему, если хотите:

doclines = doc.splitlines()
doc_rejoined = ''.join(doclines)

но теперь doc_rejoined будет иметь все строки, идущие вместе без разделителя.

Ответ 2

Поскольку вы читаете весь документ в одну строку, которая выглядит так:

'a\nb\nc\nd\n'

Когда вы выполняете rstrip('\n') в этой строке, будет удален только самый правый \n, оставив все остальное нетронутым, поэтому строка будет выглядеть так:

'a\nb\nc\nd'

Решение состоит в том, чтобы разделить файл на строки, а затем на правую полосу каждой строки. Или просто замените все символы новой строки ничем: s.replace('\n', ''), который дает вам 'abcd'.

Ответ 3

rstrip разделяет конечные пробелы со всей строки. Если вы ожидали, что он будет работать с отдельными линиями, вам нужно разбить строку на строки сначала, используя что-то вроде doc.split('\n').

Ответ 4

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

with open('doc.txt') as f:
    for line in f:
        print line,

Пояснение:

  • Рекомендуемый способ открытия файла - использовать with, который заботится о закрытии файла в конце
  • Вы можете перебирать каждую строку в файле с помощью for line in f
  • Теперь не нужно вызывать rstrip(), потому что мы читаем и печатаем по одной строке за раз

Ответ 5

Рассмотрите возможность использования replace и замены каждого экземпляра '\n' на ''. Это избавит вас от всех новых символов строки во входном тексте.