我有一个奇怪的文本文件,我需要用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"
它不会崩溃,但最终剥离了一些奇怪的字符,然后抛出了列的间距。以下是我正在谈论的其中一个角色的例子(需要使用图片,因为我无法在此处复制/粘贴):
我确定这是问题的一部分。那么,我该怎么做呢:
将文件带入,使用正则表达式只需将\ d {3} - \ d {2} - \ d {4}更改为XXX-XX-XXXX,其中文件中包含一些奇怪的字符,而不更改任何其他内容在文件中?谢谢大家!
答案 0 :(得分:0)
您应该以二进制模式打开文件,并避免处理UTF-8的Unicode解码。
然后使用字节正则表达式查找社会安全号码,并用相关字节替换找到的地点。