踩过的几个坑json.dumps/含while的shell脚本/awk~

本文记录了作者在使用Python的json.dumps处理中文字符、编写带while的Shell脚本时遇到的问题,以及在awk操作中的经验教训。通过分享这些踩坑经历,提醒开发者注意类似问题,提高编程效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

坑了自己的坑

  踩坑的经历是痛苦的,值得纪念,毕竟表示曾经逝去的青涩,同时避免以后再踩,虽然踩踩更健康。
  注1:坑号与重要度无关,只是顺序表示而已。
  注2:版权已由中华人民共和国公民本人所有,最终解释权归我党所有。

1号坑

  上硬菜,已知 list=[{“a”:”1”, “b”:”2”}, {“c”:”逗逼”,”d”:”人生”}],如何存储到文件中,且中文能够正常显示呢?

    import json
    list_save=[{"a":"1a", "b":"2b"}, {"c":"逗逼","d":"人生"}]
    json.dumps(list_save, ensure_asscii=False)
    ## 上面json.dumps将变量存储为json字符串,且支持中文 ##
    ## 精髓就在 ensure_asscii=False上面
    ## 没有这个设置,将其存储到文本中时,会出现\e0\gx这样的中文 ##
    ## 技巧:大量地读取被json.dumps的文件时,用simplejson.loads()读取会更快,或者直接用python的内置函数 ##

  中文处理总是伴随着各种蛋疼的诡异事情发生,木有办法,老祖宗留下的最开发人大脑的语言有其独特的地方,体现在代码里也一样,需要不一样的待遇#我就是我,不一样的我#

2号坑

  上鸡汤,已知一个shell脚本用while写的无限循环,想修改循环内部的代码,怎么生效?前提:该shell脚本早先已经运行起来了。

    (1)## while的shell脚本 ##
    while [1 -gt 0]
    do
        ## 某些无聊操作 ##
    done
    (2)## 你想添加的shell命令 ##
    echo "我为什么这么帅气无双?"
    (3)## 修改之后的shell脚本 ##
    while [1 -gt 0]
    do
        ## 某些无聊操作 ##
        echo "我为什么这么帅气无双?"
    done

  当修改完事之后,发现死活不出“我为什么这么帅气无双?”,然后对自己的帅度产生怀疑,难道真的不帅?难道苍天无眼?啊!
  悲愤中,准备砸了电脑,干掉所有不爽的人,自此浪迹天涯之时,发现这个循环shell脚本一直在运行,所有后续修改只有在重新启动该脚本之后才会生效,然后阳光明媚起来,生活是美好的。

    ## 查看一下这个shell脚本是否在运行 ##
    ps -aux | grep "shell.name"
    ## 1314  0.0  0.0 138  222 ?  S    11:11   00:00 sh shell.name ## 果断在运行中 ##
    ## Gan掉这个shell脚本 ##
    kill -9 1314
    ## 多么痛的领悟啊,1314被亲手干掉了 ##
    ## 重新给这个脚本一次机会 ##
    cd /your/shell/dir/; sh shell.name
3号坑

  这是一道awk的菜,其实不是坑,只是记录下来,告诉自己有时候有很牛逼的东西你不懂,自己搞一套从而浪费了时间。
  我们想计算文本中某些列的累加和,或者类似的操作,用awk怎么搞?

    ## awk -F '\t' 'BEGIN{init paras}{if(expre) process here} END{print result}' ##
    ## 解释一下上面的命令,begin->开始 初始化参数;if满足条件,则对参数操作,end->输出结果 ##
    ## -F '\t'是设置间隔符为"\t" ##
    ## 假如我们计算一下第三列的总和 ##
    awk -F '\t' 'BEGIN{sum=0}{sum += $3}END{print "sum is:"$sum}' file.name
    ## 其中BEGIN/END小写行不,不行 ##
4号坑

  这是后续又踩的坑之一,补充在这里。

    ## 标准输出1、标准error输出2 ##
    ## this means 标准输出 到文件中 ##
    print sth > file
    ## this means 将标准错误重定向到 标准输出 ##
    print sth > file 2>&1
    ## 上面这句的好处是 ## 
    ## 如果在shell里面的错误,也可以打印到文件里 ##
    ## 方便查看日志的时候查看执行异常,错误 ##
5号坑

  这个坑本不是坑,无奈我踩进来了,也就变成了坑。读取文件。

    ## 关于读取文件的方法 ##
    ## (1) 简洁版,最优版 ## 建议这个方法 ##
    for line in open(filepath):
        line = line.strip()# 这里需要加strip,否则会有\n #
        if len(line) == 0: continue
        # do sth yourself #
    ## (2) 稍微复杂版 ##
    f = open(filepath)
    line = f.readline().strip()
    while line != "":
        if len(line)>0:
            # do sth yourself #
            # while 里面不能用continue # 结构上不美观紧凑 #
        line = f.readline().strip()
        # 这一句是必须的,否则while无法循环 #
    ## (3)避免line的读取 ##
    with open(filepath) as f:
        for line in f:
            line = line.strip()
            if len(line) == 0: continue
            # do sth yourself #
后记

  踩坑是个不断纠错的过程,是指导学习趋向于较优的一种学习策略。在机器学习中,可以用其来指导学习过程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值