Python处理包含奇怪字符

时间:2017-10-04 13:34:41

标签: python file encoding python-3.6

我有一个奇怪的文本文件,我需要用XXX-XX-XXXX替换任何社会安全号码。大!简单地吸入文件,正则表达式,然后将文件写出来。爱的生活,这将很容易馅饼。我的接受标准是我只能更改SSN,文件的其余部分必须保持完全相同,因为它有固定的宽度列,甚至必须保留奇怪的字符以调试其他进程。好的,很酷,我知道了。

我在:

中阅读了该文件

filehandle = open("text.txt", "r", encoding="UTF-8")

它给了我一些像这样的编码错误:

'utf-8' codec can't decode byte 0xd1 in position 6919: invalid continuation byte

我无法弄清楚编码。我已经尝试过chardet并且认为它是ASCII,但我只是得到了不同的编码错误。我只需要一种方法来吸取这个文件,做一个简单的正则表达式并把它放回去。我可以投入:

errors="ignore"

它不会崩溃,但最终剥离了一些奇怪的字符,然后抛出了列的间距。以下是我正在谈论的其中一个角色的例子(需要使用图片,因为我无法在此处复制/粘贴):

text

enter image description here

  • 4E是' N'在儿童中
  • EF BF BD组成..东西
  • 53是CHILDREN中的S

我确定这是问题的一部分。那么,我该怎么做呢:

将文件带入,使用正则表达式只需将\ d {3} - \ d {2} - \ d {4}更改为XXX-XX-XXXX,其中文件中包含一些奇怪的字符,而不更改任何其他内容在文件中?谢谢大家!

1 个答案:

答案 0 :(得分:0)

您应该以二进制模式打开文件,并避免处理UTF-8的Unicode解码。

然后使用字节正则表达式查找社会安全号码,并用相关字节替换找到的地点。