问答 有没能解释下为什么不相等,怎么样才能让他们比对成功呢?

Time · 2022年08月08日 · 最后由 Time 回复于 2022年08月09日 · 10396 次阅读

事件起因:
excel 中的文档内容与 apk 中的配置文件 xml 文件进行比对,结果发现总是有一些会比对失败,但是去文件中看长的是一模一样,类型也是一样的
查看了下规律发现,只要是 excel 中内容中带空格或者逗号 (,)这样的就会比对失败。不清楚为什么会造成这样

  1. 尝试把 excel 的内容先复制到 txt 文本中(怀疑是格式导致)发现并不起效果
  2. 清除了 excel 字体的格式同样不行
  3. 把字符串的中间部分的空格进行删除,然后重新打个空格才能相等
最佳回复

其实很简单,你打印下下这两个字符串的字符 ascii 就可以看出不同了

a = "xxxx yyyyy"
for c in a:
    print(ord(c))

如果想要相同可以用正则替换掉对应字符

共收到 12 条回复 时间 点赞

把字符串的中间部分的空格进行删除,然后重新打个空格才能相等
猜测是空格和标点符号的问题,中文输入法的空格和逗号和英文输入法的空格和逗号编码不是一个。
最好把你截图的 2 个字符串源码贴出来,肉眼谁看得出来。。。

这个我之前遇到过,空格有可能是编码格式不一样。空格在 ASCII 里面的有 160 和 32 两个值,所以看起来都是空格,但是实际的 ASCII 值不一样。
我的做法是,把里面的空格都转码一下(如果是 160 就替换成 32,然后再来比对:

if ord(string_list[i])== 160:
   ord(string_list[i] = chr(32)

实例代码能否发下
看下他们的 id 空间是否为同一个

这种比对比的是内存地址,试试 assert 吧

Time #6 · 2022年08月09日 Author


文件打成了压缩包放百度云了,大家可以试下
链接:https://pan.baidu.com/s/15fbV5_u_PI92uY2T_OuTiw
提取码:tqvc

其实很简单,你打印下下这两个字符串的字符 ascii 就可以看出不同了

a = "xxxx yyyyy"
for c in a:
    print(ord(c))

如果想要相同可以用正则替换掉对应字符

Time #8 · 2022年08月09日 Author
咖啡咖 回复

is 是内存地址比较,==是值相等就行

Time #9 · 2022年08月09日 Author

Time #10 · 2022年08月09日 Author


感谢解答😂

Time 回复

嗯,其实我建议用正则替换是有原因的,这类空格其实都满足正则里的\s:

所以用正则替换\s 为常用的空格 (chr(32)) 比较具有普遍性

Time #12 · 2022年08月09日 Author
JoyMao 回复

😂 好的,我代码里用正则去做处理了

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册