zoukankan      html  css  js  c++  java
  • 用python3实现linux的sed功能

    sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换、删除、新增、选取等特定工作。现在用python简单实现sed的主要命令,将old_text替换为new_text,同时将原来的文件备份,原有的文件被修改。

    sed.py的内容如下:

     1 import sys
     2 import os
     3 import shutil
     4 
     5 if len(sys.argv) < 4:
     6     sys.exit("usage:sed.py old_text new_text file_name")
     7 
     8 # 假定程序的参数是正确的
     9 # 取参数赋值
    10 progran_ame, old_text, new_text, arg_file_name = sys.argv
    11 print(progran_ame, old_text, new_text, arg_file_name)
    12 
    13 if not os.path.exists(arg_file_name):
    14     sys.exit("文件%s不存在" % arg_file_name)
    15 
    16 
    17 # 判断输入的参数是否为绝对路径, 如果是相对路径则取得绝对路径
    18 if os.path.isabs(arg_file_name):
    19     src_file = arg_file_name
    20 else:
    21     src_file = os.path.realpath(arg_file_name)
    22 
    23 # 将原来的文件重新命名,得到备份文件名
    24 src_path_name = os.path.dirname(src_file)
    25 src_file_name = os.path.basename(src_file)
    26 bak_file_name = os.path.splitext(src_file_name)[0]+'_bak'+os.path.splitext(src_file_name)[1]
    27 back_file = src_path_name+os.sep+bak_file_name
    28 
    29 # 备份文件
    30 shutil.copy(src_file, back_file)
    31 
    32 out_file = open(src_file, 'w', encoding='utf-8')
    33 # 对文件的每一行进行遍历,同时进行替换操作
    34 with open(back_file, encoding='utf-8') as f:
    35     for line in f:
    36         out_file.writelines(line.replace(old_text, new_text))
    37 
    38 out_file.close()

    测试

    test.txt文件内容如下

    bj您好
    我是小笨蛋
    欢迎你……bj

    python sed.py bj 北京 test.txt

    将test.txt中"bj"替换为"北京"

    执行后,生成test_bak.txt文件,内容和test.txt一样。test.txt中的内容变为

    北京您好
    我是小笨蛋
    欢迎你……北京
  • 相关阅读:
    nohub和 2>&1 &
    postman
    ximd 破解版
    B树和B+树的插入、删除图文详解
    漫画叙述B+树和B-树,很值得看!
    数据库 操作的几个问题记录
    推送实现 应用未启动情况下的自定义声音播放
    collectionView reloadData时 点击问题
    强制横屏或者竖屏
    wkWebView 或者 webView 在客户端隐藏某些布局的方法
  • 原文地址:https://www.cnblogs.com/yangshl/p/6287334.html
Copyright © 2011-2022 走看看