文件读写与字符串替换

前段时间写了个 py 脚本,替换目录中所有文件中的字符串,但是会出现问题,如果用短字符串替换长字符串就会出现最后出现一些原有文件的遗留,原来文件内容不会清除,而是以覆盖的形式替换,查了下有 truncate(size) 函数,用以从首字节开始截断 size 大小(默认截断所有),就解决了。

#!/usr/bin/env python3

import os
import sys
import argparse

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument("file_directory", help="the directory contain files you want replace", default="")
    parser.add_argument("source_str", help="the source string you want replace", default="")
    parser.add_argument("destination_str", help="the destination string you want replace to", default="")
    args = parser.parse_args()
    file_dir = args.file_directory
    
    files = os.listdir(file_dir)
    for per_file in files:
        file_path = file_dir + "/" + per_file
        f = open(file_path, 'r+')
        s = f.read()
        f.seek(0, 0)
        f.truncate()
        f.write(s.replace(args.source_str, args.destination_str))
        f.close()

然后还不如 linux sed 命令来的方便:

grep -rl "Source string" . | xargs -n1 sed -i "s/Source string/Destination string/g"

读写模式主要有以下:

访问模式意义
r
w覆盖写,文件不存在会进行创建。
a附加写,文件不存在会进行创建。
r+读 + 写。
w+读 + 写,文件不存在会进行创建。
a+读 + 附加写,文件不存在会进行创建。

多了 “b”,就是用来表示二进制读写

sed 命令

替换:s
全局:g
全局替换:替换文件中所有包含 source 为 target :
sed -i 's/source/target/g' file.txt

删除文件中包含 source 的行:
sed -i '/source/d' file.txt

删除多文件直接目录就行 ./*
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值