Python 处理包含奇怪字符的文件
Python process a file that contains strange characters
我有一个奇怪的文本文件,我需要用 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"
它不会崩溃,但最终会删除一些奇怪的字符,从而导致列间距消失。这是我正在谈论的十六进制字符之一的示例(需要使用图像,因为我不能在此处 copy/paste):
- 4E 是 CHILDREN
中的 'N'
- EF BF BD 组成..东西
- 53 是儿童中的 S
我确定这是问题的一部分。那么,我应该怎么做才能简单:
把文件拿进去,使用正则表达式将 \d{3}-\d{2}-\d{4} 简单地改成 XXX-XX-XXXX 其中文件中有一些奇怪的字符而不改变文件中还有其他内容吗?谢谢大家!
您应该以二进制模式打开文件并避免处理 UTF-8 的 Unicode 解码。
然后使用字节正则表达式查找社会保险号并将找到的位置替换为相关字节。
我有一个奇怪的文本文件,我需要用 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"
它不会崩溃,但最终会删除一些奇怪的字符,从而导致列间距消失。这是我正在谈论的十六进制字符之一的示例(需要使用图像,因为我不能在此处 copy/paste):
- 4E 是 CHILDREN 中的 'N'
- EF BF BD 组成..东西
- 53 是儿童中的 S
我确定这是问题的一部分。那么,我应该怎么做才能简单:
把文件拿进去,使用正则表达式将 \d{3}-\d{2}-\d{4} 简单地改成 XXX-XX-XXXX 其中文件中有一些奇怪的字符而不改变文件中还有其他内容吗?谢谢大家!
您应该以二进制模式打开文件并避免处理 UTF-8 的 Unicode 解码。
然后使用字节正则表达式查找社会保险号并将找到的位置替换为相关字节。