我有一个文件,其中一些行中的某些字段包含奇怪的字符,导致数据库导入出现问题。
我已经搜索过了Python 3中如何替换非ASCII字符的文章,但没有任何作用。
当我在vi中打开文件并执行:set list命令时,发现在一个行末尾有一个$符号,而在下一行开头有^I^I。这两行应该合并成为一行,并且不应该有^I符号。我知道$代表行末'\n',并尝试替换它们,但没有效果。
我不知道^I代表什么,可能是制表符。
我尝试了以下函数,但无济于事:
我已经搜索过了Python 3中如何替换非ASCII字符的文章,但没有任何作用。
当我在vi中打开文件并执行:set list命令时,发现在一个行末尾有一个$符号,而在下一行开头有^I^I。这两行应该合并成为一行,并且不应该有^I符号。我知道$代表行末'\n',并尝试替换它们,但没有效果。
我不知道^I代表什么,可能是制表符。
我尝试了以下函数,但无济于事:
def remove_non_ascii(text):
new_text = re.sub(r"[\n\t\r]", "", text)
new_text = ''.join(new_text.split("\n"))
new_text = ''.join([i if ord(i) < 128 else ' ' for i in new_text])
new_text = "".join([x for x in new_text if ord(x) < 128])
new_text = re.sub(r'[^\x00-\x7F]+', ' ', new_text)
new_text = new_text.rstrip('\r\n')
new_text = new_text.strip('\n')
new_text = new_text.strip('\r')
new_text = new_text.strip('\t')
new_text = new_text.replace('\n', '')
new_text = new_text.replace('\r', '')
new_text = new_text.replace('\t', '')
new_text = filter(lambda x: x in string.printable, new_text)
new_text = "".join(list(new_text))
return new_text
有没有一种工具可以准确地显示出问题字符,并找到替换它的方法?
我是这样打开文件的(.csv 文件以 UTF-8 格式保存)
f_csv_in = open(csv_in, "r", encoding="utf-8")
下面有两行文字,其中非ASCII字符会出现问题。
这两行应该是一行。注意第37行末尾的$符号和第38行以^I^I开头。
问题的一部分是vi显示了一个新的换行符$在第37行,而我不希望它出现在那里。这应该是一行。
37 Cancelled,01-19-17,,basket,00-00-00,00-00-00,,,,98533,SingleSource,,,17035 Cherry Hill Dr,"L/o 1-19-17 @ 11:45am$
38 ^I^IVictorville",SAN BERNARDINO,CA,92395,,,,,0,,,,,Lock:6111 ,,,No,No,,0.00,0.00,No,01-19-17,0.00,0.00,,01-19-17,00-00-00,,provider,,,Unread,00-00-00,,$
^
用于转义字符。而$
通常表示行末,例如在正则表达式中。您的文件是否为“管道分隔符”,前两个字段为空?您使用的编辑器是什么?您能否禁用格式字符的显示? - hyperTrashPanda