0

我有一组数据,但我只需要处理utf-8数据,所以我需要删除所有带有非utf-8符号的数据。

当我尝试使用这些文件时,我收到:

UnicodeDecodeError: 'charmap' codec can't decode byte 0x8d in position 3062: character maps to <undefined> and UnicodeDecodeError: 'utf8' codec can't decode byte 0xc1 in position 1576: invalid start byte 

我的代码

class Corpus:
        def __init__(self,path_to_dir=None):
                self.path_to_dir = path_to_dir if path_to_dir else []


        def emails_as_string(self):
                for file_name in os.listdir(self.path_to_dir):
                        if not file_name.startswith("!"):
                                with io.open(self.add_slash(self.path_to_dir)+file_name,'r', encoding ='utf-8') as body:
                                        yield[file_name,body.read()]                        

        def add_slash(self, path):
                if path.endswith("/"): return path
                return path + "/"

yield[file_name,body.read()]我在这里和这里收到错误list_of_emails = mailsrch.findall(text),但是当我使用 utf-8 时一切都很好。

4

1 回答 1

2

我怀疑你想errors='ignore'bytes.decode. 有关更多信息,请参阅http://docs.python.org/3/howto/unicode.html#unicode-howtohttp://docs.python.org/3/library/stdtypes.html#bytes.decode 。

编辑:

这是一个示例,显示了执行此操作的好方法:

for file_name in os.listdir(self.path_to_dir):
    if not file_name.startswith("!"):
        fullpath = os.path.join(self.path_to_dir, file_name)
        with open(fullpath, 'r', encoding ='utf-8', errors='ignore') as body:
            yield [file_name, body.read()]  

使用os.path.join,您可以消除您的add_slash方法,并确保它可以跨平台工作。

于 2012-11-06T12:34:31.107 回答