如何从字符串中删除 \n 和 \r

Posted

技术标签:

【中文标题】如何从字符串中删除 \\n 和 \\r【英文标题】:How to remove \n and \r from a string如何从字符串中删除 \n 和 \r 【发布时间】:2016-06-20 05:55:20 【问题描述】:

我目前正在尝试从这个网站获取代码:http://netherkingdom.netai.net/pycake.html 然后我有一个python脚本解析出html div标签中的所有代码,最后将div标签之间的文本写入文件。问题是它在文件中添加了一堆 \r 和 \n 。我怎样才能避免这种情况或删除 \r 和 \n。这是我的代码:

import urllib.request
from html.parser import HTMLParser
import re
page = urllib.request.urlopen('http://netherkingdom.netai.net/pycake.html')
t = page.read()
class MyHTMLParser(HTMLParser):
    def handle_data(self, data):
        print(data)
        f = open('/Users/austinhitt/Desktop/Test.py', 'r')
        t = f.read()
        f = open('/Users/austinhitt/Desktop/Test.py', 'w')
        f.write(t + '\n' + data)
        f.close()
parser = MyHTMLParser()
t = t.decode()
parser.feed(t)

这是它生成的文件:

b'
import time as t\r\n
from os import path\r\n
import os\r\n
\r\n
\r\n
\r\n
\r\n
\r\n'

最好我也希望删除开头的 b' 和最后一个 '。我在 Mac 上使用 Python 3.5.1。

【问题讨论】:

如果 urllib 返回一个字节对象,我会说 3.x 另外,html.parser 是 Python 3。 @RafaelCardoso 我正在使用 python 3.x 只需将t 转换为字符串而不是字节数组; t = str(page.read(), 'UTF-8')。 (当然可以选择用你想要的编码替换 UTF-8) @JoachimIsaksson 似乎删除了除第一行之外的所有内容。 【参考方案1】:

一个简单的解决方案是去除尾随空格:

with open('gash.txt', 'r') as var:
    for line in var:
        line = line.rstrip()
        print(line)

rstrip() 与使用 [:-2] 切片相比的优势在于这对于 UNIX 样式文件也是安全的。

但是,如果您只想摆脱 \r 并且它们可能不在行尾,那么 str.replace() 是您的朋友:

line = line.replace('\r', '')

如果您有一个字节对象(即前导 b'),您可以使用以下方法将其转换为本机 Python 3 字符串:

line = line.decode()

【讨论】:

这似乎不起作用。我试过了,它并没有改变它。 有一个错字(OS X 更正文本),strip 应该是rstrip 表示str对象没有属性解码。我没有在代码中的任何地方将字节数据转换为字符串,为什么会出现这个错误? 另外@cdarke 我在 \r 上尝试了替换代码,但它不起作用。所有的 \r 仍然存在。我什至在其他字符上尝试过它以确保它可以正常工作,并且它删除了其他字符,它只是不会删除 \r 或 \n。 您应该在字节对象上使用decode(),而不是字符串对象-您询问如何摆脱b'-表示字节对象。我不明白为什么 replace() 不起作用,您正在捕获我希望的返回值。请记住,没有任何 Python 字符串方法会改变字符串,它们都返回一个新字符串(因为字符串是不可变的)。【参考方案2】:

删除回车:

line = line.replace('\r', '')

删除标签

line = line.replace('\t', '')

【讨论】:

以上是关于如何从字符串中删除 \n 和 \r的主要内容,如果未能解决你的问题,请参考以下文章

如何在 R 中使用 gsub 从字符串中删除非数字字符?

在java中去除新行和回车[重复]

如何使用javascript从字符串中删除¶

无法从 r 中的字符串中的数据中删除这些字符

从R中的字符串中删除所有特殊字符?

如何从R中的字符串中删除单引号?