(实在忍不住,这事儿必须说!!!)
在最近的UI自动化脚本中,涉及了一些运维操作就免不了对文件系统的操作。Python中'\'代表转义字符,而Windows的文件路径也是采用'\'分割,之前我们对路径的处理方式是:将采用 '/' 替代 '\',可是,毫无征兆,有那么一天,在一个美丽的傍晚,回车的时候就提示文件路径无效了!!!就这样猝不及防。。。
分析数据流向:
- 保存数据:前端设置UI操作的相关参数(文件路径D:\temp.sql)--> Python处理(D:\\temp.sql) --> 保存DB (D: emp.sql)
- 显示数据:查询DB获取参数path(D:\temp.sql) --> Python处理(D:\\temp.sql)-->显示效果(D:\temp.sql)
- 使用数据:查询DB获取参数path(D:\temp.sql) --> Python处理(D:\\temp.sql) --> pyautogui.write(path)输入到Windows文件窗口中(D: emp.sql)
这是使用 \ 为分隔符时的数据流向效果,完全不是我期望的样子;
只有显示数据时,保存的效果与期望一致
......此处省略一万字,百度的解决方式......
直接给出解决方式:
1. 保存数据:
目的将前端输入的文件路径D:\temp.sql,保存到DB时也是D:\temp.sql,这样在前端回显时可以不用做任何处理。
通过Debug分析保存数据时的数据动态得出,保存到DB时执行SQL会先将\\恢复为\后,进行保存,而保存时会对文中的\t进行转义,导致出错。(也就是会进行两次转义)
所以,若需要保存为目标状态,则存入DB时必须是未转义前的样子
为了支持两次转义,在Python处理的过程中,将 '\\' 替换为 '\\\\' ,即可在保存DB后存储为目标格式
2. 显示数据:
从DB中查询出的数据,到显示层不会发生改变;所以,只要保存的格式正确,就无需担心显示
3. 使用数据:
从数据流向可以看出,使用数据时由于时调用write方法,文件路径还是以python字符串的方式进行处理,所以,与显示数据不同,使用数据也需要进行二次转义。
转义方法同保存数据的操作,不赘述
结论:
如果字符被按照转义字符处理了,则需要你来拯救它,使它支持两次转义即可
其实我更纳闷,Python的字符串转义是怎样的执行的??如果可以寻求到结果,我们调用python的转义函数岂不是更好、更完美
以上内容为个人的有限理解,不足之处恳请指出