【问题标题】:Why doesn't .rstrip('\n') work?为什么 .rstrip('\n') 不起作用?
【发布时间】:2013-08-16 20:46:16
【问题描述】:

假设doc.txt 包含

a
b
c
d

我的代码是

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

为什么我得到相同的值?

【问题讨论】:

    标签: python line


    【解决方案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') 之类的东西将字符串分成几行。

        【讨论】:

        • 或者只是replace('\n', '')。除了行尾之外,行尾不会出现在任何地方。
        • @user2357112 最佳答案。
        【解决方案4】:

        试试这个:

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

        解释:

        • 推荐的打开文件方法是使用with,它负责在最后关闭文件
        • 您可以使用for line in f 遍历文件中的每一行
        • 现在无需致电rstrip(),因为我们一次读取和打印一行

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2018-11-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-12-21
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多