我正在 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'>
æµ·é®®
这里有什么问题吗?我该如何解决它?
为了简化操作,您可以使用标准的 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
同样,这个重构的代码仅利用标准字符串功能。尝试一下。