如何使用python删除字符串中的\n和\r

如何使用python删除字符串中的\n和\r,python,Python,我编写了一个python(2.7)程序,从数据库中的表中检索数据并将其复制到csv文件中。存在各种不可打印格式(unicode)的数据,其中包含\n\r。由于\n,\r我无法检索表中的数据 我试过以下方法 str.replace('\n','').replace('\r',' ') str.replace('\n','\\n').replace('\r', '\\r') 但它没有成功 csv代码 cur.execute('select * from db.table_name) with o

我编写了一个python(2.7)程序,从数据库中的表中检索数据并将其复制到csv文件中。存在各种不可打印格式(unicode)的数据,其中包含\n\r。由于\n,\r我无法检索表中的数据

我试过以下方法

str.replace('\n','').replace('\r',' ')
str.replace('\n','\\n').replace('\r', '\\r')
但它没有成功

csv代码

 cur.execute('select * from db.table_name)
with open('test.csv','w') as csv_file:
    csv_writer=csv.writer(csv_file)
    for row in cur:
        print "row = ", count
        count = count + 1
        newrow=[];
        for index in range(0, len(row)):
            value= row[index]
            if(type(row[index])is str):
                 value=row[index].replace("\n"," ").replace("\r"," ")
            newrow.append(value)
       csv_writer.writerow(newrow)
str.replace()
返回一个新字符串,因此您必须将其分配给原始字符串以进行更改:

s = s.replace('\n','').replace('\r','')
str.replace()
返回一个新字符串,因此您必须将其分配给原始字符串以进行更改:

s = s.replace('\n','').replace('\r','')

Unicode具有外部序列化表示(如UTF-8和UTF-16)和依赖于语言的内部实现(如WCHAR)。您的数据库读取似乎为您提供了字符串的UTF-16序列化版本,您所要做的就是对其进行解码。您当然不想删除
\r
\n
,因为它们是多字节序列的一部分,根本不是回车符或换行符

举个简单的例子,我可以删除数据库和循环中的所有内容,只处理您发布的字符串:

>>> value = '\r\xaeJ\x92>J\xe7\x1d\n\x89`\xc6\xf8\x9c<\x18'
>>> decoded = value.decode('UTF-16')
>>> print repr(decoded)
u'\uae0d\u924a\u4a3e\u1de7\u890a\uc660\u9cf8\u183c'
>>> print decoded
긍鉊䨾ᷧ褊왠鳸ᠼ
>>> 

>>value='\r\xaeJ\x92>J\xe7\x1d\n\x89`\xc6\xf8\x9cUnicode具有外部序列化表示,如UTF-8和UTF-16,以及依赖于语言的内部实现,如WCHAR。您的数据库读取似乎为您提供了字符串的UTF-16序列化版本,您所要做的就是对其进行解码。您当然不想删除
\r
\n
,因为它们是多字节序列的一部分,根本不是回车符或换行符

举个简单的例子,我可以删除数据库和循环中的所有内容,只处理您发布的字符串:

>>> value = '\r\xaeJ\x92>J\xe7\x1d\n\x89`\xc6\xf8\x9c<\x18'
>>> decoded = value.decode('UTF-16')
>>> print repr(decoded)
u'\uae0d\u924a\u4a3e\u1de7\u890a\uc660\u9cf8\u183c'
>>> print decoded
긍鉊䨾ᷧ褊왠鳸ᠼ
>>> 

>>value='\r\xaeJ\x92>J\xe7\x1d\n\x89`\xc6\xf8\x9c您可以使用正则表达式简化代码:

例如:

import re
s = "Salut \n Comment ca va ?"
s = re.sub("\n|\r|\t", "",  s)

print(s)
输出如下:

卡瓦,你好吗


您可以使用正则表达式简化代码:

例如:

import re
s = "Salut \n Comment ca va ?"
s = re.sub("\n|\r|\t", "",  s)

print(s)
输出如下:

卡瓦,你好吗


只需在输入末尾添加.strip()即可 例如:n=input().strip()
它将删除字符串中的所有“/r”

您只需在输入末尾添加.strip()即可 例如:n=input().strip()

它将删除字符串中的所有“/r”

我对第二个替换行感到困惑,您到底希望在那里发生什么?为什么要删除
\r\n
(它们是换行符),为什么替换不起作用?请发布一些示例,以展示一小部分错误生成CSV的代码示例,我们可能会向您展示如何修复它,以便不需要这些替换。添加
print(repr(value))
并添加输出,does
。replace(\\r“,”)
有不同的效果吗?@Padraic Cunningham非常感谢你救了我一天。我对第二个替换行感到困惑,你到底想在那里发生什么?为什么你想摆脱
\r\n
(它们是换行符)为什么替换不起作用?请发布一些示例,以展示一小部分错误生成CSV的代码示例,我们可能会向您展示如何修复它,以便不需要这些替换。添加
print(repr(value))
并添加输出,does
。replace(\\r“,”)
有不同的效果吗?@Padraic Cunningham非常感谢你救了我一命。我真的很抱歉,我使用了与上面相同的方法,来吧,这是一件简单的事情,这就是为什么我没有提到。@kickbhatwoski:你会惊讶有多少次这个问题是如此简单。@kickbhatwoski你不会惊讶于人们发布信息不充分的非常不完整的问题。是的,先生,我的错,但是我修改了我的问题,我真的很抱歉,我使用了与上面相同的方法,来吧,这是一件简单的事情,这就是为什么我没有提到。@kickbhatwoski:你会惊讶有多少次这个问题是如此简单。@kickbhatwoski你不会惊讶于人们发布信息不充分的非常不完整的问题。是的,先生,我的错,但我通过编辑更正了我的问题。谢谢,但是@Padraic Cunningham在几分钟前给出了相同的答案。Padraic要求您发布
print(repr(value))
的结果,这对于了解如何解释您给我们的示例字符串中的反斜杠很重要。您提到您正在阅读unicode数据,我不相信您能在不将unicode解码为python
unicode
字符串的情况下解决问题。很抱歉,我没听清楚这是一个毫无意义的字符串。绝对不是UTF-16。它混合了韩语、汉语、蒙古语和未定义的代码点…没有连贯性。谢谢,但是@Padraic Cunningham在几分钟前给出了相同的答案。Padraic要求您发布
打印的结果(repr(value))
这对于了解如何解释您给我们的示例字符串中的反斜杠非常重要。您提到您正在阅读unicode数据,我不相信您能在不将unicode解码为python
unicode
字符串的情况下解决问题。很抱歉,我没听清楚这是一个毫无意义的字符串。绝对不是UTF-16。它混合了韩语、汉语、蒙古语和未定义的代码点……没有连贯性。