【问题标题】:Python: Replace, rstrip() not able to remove newlinesPython:替换,rstrip() 无法删除换行符
【发布时间】:2011-07-01 08:54:33
【问题描述】:

我有一个信息电子表格(由 csv 模块读取的 UTF-8 CSV 文件),其中包含需要进入库存数据库的大量产品的信息。我正在尝试将描述从换行的文本行设置为 html 列表标签。

我遇到的问题是以下行无法替换字符串中的换行符:

line[2] = "<ul><li>" + line[2]
line[2].replace('\n', '</li><li>')
line[2] += "</li></ul>"

即使第二行被替换为:

字符串仍然包含换行符
line[2] = line[2].rstrip()

发生了什么事,我搞砸了什么? =)

【问题讨论】:

    标签: python replace newline


    【解决方案1】:

    来自python手册

    str.replace(old, new[, count])
    返回所有出现的子字符串 old 替换为 new 的字符串副本 。如果给出了可选参数 count,则仅替换第一个 count 出现。

    如您所见,它并没有取代“就地”,而是尝试:

    line[2] = "<ul><li>" + line[2]
    line[2] = line[2].replace('\n', '</li><li>')
    line[2] += "</li></ul>"
    

    【讨论】:

    • 我觉得自己像个不可思议的白痴,我永远感激你。谢谢!
    • 更重要的是,python 字符串是不可变的,所以没有对它们“原地”做任何事情。
    • @James Christie 很高兴为您提供帮助。请将问题标记为已回答。
    【解决方案2】:

    替换不到位。

    也是这样

    line[2] = "<ul><li>" + line[2].replace('\n', '</li><li>') + "</li></ul>"
    

    【讨论】:

      【解决方案3】:

      别忘了escape

      escaped = cgi.escape(line[2].rstrip()).replace("\n", "</li><li>")
      line[2] = "<ul><li>%s</li></ul>" % escaped
      

      Str.replace 返回一个 copy 而不是就地修改,并且不带参数的 rstrip 将删除所有尾随空格。由于这是针对 HTML 的,并且尾随空格可能不会包含诸如“\n \n”之类的内容,这对您来说可能无关紧要,但需要注意。

      【讨论】:

      • -1 """Str.replace ... 不带参数将删除所有尾随空格。""" Utter codswallop.
      • @JohnMachin:意思是 rstrip;但这仍然是一种欺骗性的引用方式。
      • “欺骗性”??我称之为“省略与评论无关的单词,并在适当的时候插入省略号以表明文本被省略”。换句话说:您说 str.replace 将在没有参数的情况下删除所有尾随空格。我还想指出,原始文本在屏幕高度的四分之一处很容易阅读。你以为我在做什么骗局??
      猜你喜欢
      • 2021-02-14
      • 2011-01-08
      • 2018-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多