有时会遇到一些问题,费时费力不是因为技术难度,因为思维定势或者细节疏忽,记录一下
同时把一些反思记录下来
2023_02_03 滑动窗口大小加数据局部乱序
本地对比两个极大的文件,都是时序文件,a文件比b文件内容多。对比思路最初是对a逐个读出,利用b的内容构建set。但是发现一个问题,就是a,b里有时会有重复数据,使用集合会导致重复数据只加入集合又删除一次,当重复的数据再次查询时就被认为不存在,引起错误。
进而更新为使用list。a逐个读出,b滑动窗口。解决了问题。但是在更换了数据后,新的数据虽然模式相同,但是b相对于a,不止缺数据,还存在局部的乱序。需要滑动窗口足够大来解决。同时数据不一致的问题(b文件里有时会把某个field存为空,因为确实在特定条件下没用,而a的这个field始终存在),最初解决方案没考虑乱序,隔一段时间从list前面按一定条件删除即可。但是有乱序后不能这么做。要把数据统一。
写的过程里还出现了特定的值忘记恢复为0带来的问题。
在这个程序debug的过程中,因为出错的位置已经过了千万级的数据,debug模式下跑的很慢。因此想到,以后遇到类似情况,考虑好先运行一个脚本找到file.seek()需要定位的位置,然后再使用其找到位置再进行调试,而不调试原本的程序,更合理一些。大文件按正常逻辑过代码过于慢。
2023_02_24 报错奇怪
1.在如下的代码中,a是b的子类,但是在a!=b判断条件时报错了。并且因为a和b初始化时变量顺序具有一定随机性,导致这个报错每次运行不一定一致。其次,使用breakpoint() debug时,一开始打断点却断不到,后来发现是打错了地方,使用的是另一个环境,自动跳转的包和使用的环境不匹配。
1
2
3
if a!=b{
raise xxerror
}