我编写了一个python(2.7)程序来从数据库中的表中检索数据并将其复制到csv文件中。有不可打印格式(unicode)的各种数据包含\ n,\ r \ n。由于\ n,\ r \ n我无法像在表格中那样检索数据。
我试过以下
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)
答案 0 :(得分:2)
str.replace()
返回一个新字符串,因此您必须将其分配给原始字符串才能更改它:
s = s.replace('\n','').replace('\r','')
答案 1 :(得分:2)
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
긍鉊䨾ᷧ褊왠鳸ᠼ
>>>
答案 2 :(得分:1)
您可以使用正则表达式来简化代码:
例如:
import re
s = "Salut \n Comment ca va ?"
s = re.sub("\n|\r|\t", "", s)
print(s)
输出将为:
Salut Comment ca va吗?
答案 3 :(得分:0)
您只需在输入末尾添加.strip()即可 例如:n = input()。strip() 它将删除字符串中的所有“ / r”