Python 中非 ASCII 字符的检测

问题描述 投票:0回答:1

我正在 python 中处理一个数据帧,其中有一些编码错误的行,我需要删除它们。为了检测这些行,我尝试编写一个函数来返回文本是否包含 ASCII 表中不存在的字符。

以下是上下文中编码错误的行的一部分的示例: �����®®®

所有损坏的行似乎都有 à,所以我也尝试专门检测该字符。

以下是我尝试过的功能版本:

1.

    def nonASCII(text):
     if (type(text) == str):
        return bool(re.search(r'[^\x00-\x7F]+', text))
    
     return False  # Handle NaN values
    def nonASCII(text):
     if isinstance(text, str):
        return any(ord(char) >= 128 for char in text)
    return False

    def nonASCII(text):
     if (type(text) == str):
        print(aa)
        return bool(re.search(r'Ã', text))
    
     return False  # Handle NaN values
    def nonASCII(text):
     if (type(text) == str):
        return bool(re.search(r'\u00C3', text))
    
     return False  # Handle NaN values

我用上面给出的行尝试了一个测试用例来测试,也许找出问题出在哪里,这里是代码和输出(对于所有这些,没有任何改变):

print(nonASCII(df.loc[530]['_description']))
print(type((df.loc[530]['_description'])))
print(df.loc[530]['_description'])
False
<class 'str'>
æµ·é®®

这里有什么问题吗?我该如何解决它?

python character-encoding detection
1个回答
0
投票

为了简化操作,您可以使用标准的 ascii 测试函数“isascii()”来检查字符串。作为一个例子,这里是一个带有一些测试字符串的函数的简单重构版本。

def nonASCII(text):
    for x in text:
        if(not(x.isascii())):
            print(x, "was found")
            return True
    print("All of the characters in this string are ascii characters")
    return False

nonASCII("CompÃny")

nonASCII("©ompany")

nonASCII("Company")

这似乎提供了一种简化的方法来识别字符串是否包含任何非 ASCII 字符。

craig@Vera:~/Python_Programs/Checkascii$ python3 CheckAscii.py
à was found
© was found
All of the characters in this string are ascii characters

同样,这个重构的代码仅利用标准字符串功能。尝试一下。

© www.soinside.com 2019 - 2024. All rights reserved.