这段代码是我用来处理excel数据里面的非打印字符的,我的表格中会出现一个ascii码为28的文件分隔符,并且不会被替换掉,非常奇怪,不知道是否有人遇见过类似的情况。你们是如何解决的。
# 正则表达式模式,用于匹配非打印字符(ASCII 控制字符)
pattern = r'[\x00-\x1F\x7F]'
# 遍历所有工作表
for ws in all_worksheets:
# 遍历当前工作表的所有单元格并清洁数据
for row in ws.iter_rows():
for cell in row:
if cell.value:
# 将单元格值转换为字符串
cleaned_value = re.sub(pattern, '*', str(cell.value))
cell.value = cleaned_value
pattern = r'[\x00-\x1F\x7F-\xFF]'
你试试这个呢
连接
我今天早上有在小甲鱼里面发布这个问题,里面有测试的样本文件,可以下载下来试一试,看看如何解决
问题的解决方案如下:
# 正则表达式模式,用于匹配非打印字符(ASCII 控制字符),包括ASCII为28的字符
pattern = r'[\x00-\x1F\x7F\x1C]'
# 遍历所有工作表
for ws in all_worksheets:
# 遍历当前工作表的所有单元格并清洁数据
for row in ws.iter_rows():
for cell in row:
if cell.value:
# 将单元格值转换为字符串
cleaned_value = re.sub(pattern, '*', str(cell.value))
cell.value = cleaned_value
上述代码在正则表达式的模式中新增了\x1C
,该字符对应ASCII为28的文件分隔符。添加了该字符后,使用re.sub
函数就可以将所有的非打印字符,包括ASCII为28的字符都替换为星号(*)。这样,在遍历所有工作表的过程中,对每个单元格的值进行替换操作,最终达到替换所有非打印字符的目的。
但需要注意,上述代码只能处理具有文字内容的单元格。如果单元格的值是日期、数值等其他类型,则可能需要根据具体情况进行适当的转换和处理。