13

假设doc.txt包含

a
b
c
d

我的代码是

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

为什么我得到相同的值?

4

5 回答 5

20

str.rstrip()删除尾随换行符,而不是中间的所有换行符。毕竟,你有一根很长的绳子。

用于str.splitlines()将文档拆分为不带换行符的行;如果您愿意,您可以重新加入它:

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

但现在doc_rejoined将所有行一起运行而没有分隔符。

于 2013-08-16T20:51:52.197 回答
6

因为您将整个文档读入一个字符串,如下所示:

'a\nb\nc\nd\n'

当您rstrip('\n')对该字符串执行 a 时,只会\n删除最右边的,而其他所有的都保持不变,因此字符串看起来像:

'a\nb\nc\nd'

解决方案是将文件分成几行,然后右剥离每一行。或者只是用任何内容替换所有换行符:s.replace('\n', ''),这会给你'abcd'.

于 2013-08-16T20:48:09.680 回答
2

rstrip从整个字符串中去除尾随空格。如果您希望它在单独的行上工作,您需要先使用类似doc.split('\n').

于 2013-08-16T20:47:20.933 回答
1

试试这个:

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

解释:

  • 打开文件的推荐方法是使用with,它负责在最后关闭文件
  • 您可以使用遍历文件中的每一行for line in f
  • 现在无需调用rstrip(),因为我们一次读取和打印一行
于 2013-08-16T20:49:29.217 回答
0

考虑使用替换并用 '' 替换 '\n' 的每个实例。这将消除输入文本中的所有换行符。

于 2013-08-16T20:51:05.900 回答