python练习_sed替换

需求:

  1. 做一个sed替换小程序,实现在windows下可以与实现linux中sed替换的功能
  2. 支持正则(re模块)

以下代码实现的功能与思路:

功能: 

  (1)支持文件内容的替换和删除 -c 替换 -d删除
  (2)通过re模块支持命令行输入正则,从而处理文件内容(支持python中正则模式,方法请点击这里
  (3)使用读取替换写入临时文件的方式进行内容处理,默认生成的临时文件是 [.被替换文件],这样在linux中为隐藏文件,windows下调用本地命令将临时文件增加隐藏属性
  (4)替换过的内容和行数,都有有效的输出

思路:

  1、sed替换功能实现首先要获取命令行执行脚本能够获取到传入的参数(sys.argv可以获取命令行传入的参数)

  2、要能够读取源文件,按照行进行替换的匹配,然后保存到内存或者临时文件中,之后重新写入或者更改名称(os.remove可以删除源文件os.rename可以更改文件名)

  3、要支持正则需要在按行匹配的时候使用用户输入的正则进行匹配,匹配出要被替换的内容,然后进行替换即可

流程图:

使用方法: 

  执行环境:Python3.5版本  

  python sed_main [-c|d] [str] [new str] [file url]
  [-c|d]:-c 替换 -d 删除 删除不需要添加new str
  [str] :要替换或删除的字符,支持正则
  [new str]:要被替换成什么字符,-d参数不需要填写
  [file urt]:要被替换文件的路径,相对和觉对都可以

代码:

 #!/usr/bin/env python
# -*- coding: utf-8 -*- import re
import os
import sys
import platform line = 0
userin = sys.argv class File_sed(object):
def __init__(self,sed_list):
'''
self.line 计时器记住更改的行数regular()函数调用
self.sed_list 获得命令行传入的参数
'''
self.sed_list = sed_list
self.line = 0 def file_handling(self,):
if os.path.isfile(self.sed_list[-1]):
if "\\" in self.sed_list[-1]:
newfile_url = self.new_file_dispose(self.sed_list[-1],"\\")
elif "/" in self.sed_list[-1]:
newfile_url = self.new_file_dispose(self.sed_list[-1],"/")
else:
newfile_url = ""
print("Error:New files are generated to fail")
exit()
s = open(newfile_url,"a+") #创建文件用好设置隐藏属性
s.close()
if "indows" in platform.platform():
os.system("attrib +h -s %s"%newfile_url)
with open(self.sed_list[-1],encoding="utf-8") as original_file,open(newfile_url,"a+",encoding="utf-8") as new_file:
for i in original_file.readlines():
new_content = self.regular(i)
new_file.write(new_content)
os.remove(self.sed_list[-1])
os.rename(newfile_url,self.sed_list[-1])
if "indows" in platform.platform():
os.system("attrib -h %s"%self.sed_list[-1])
else:
print("文件不存在") def new_file_dispose(self,original_url,separator):
'''
生成临时文件的文件名和路径
'''
new_url = original_url.split(separator)
new_file_name = '.'+original_url.split(separator)[-1]
new_url[-1] = new_file_name
new_name_url = separator.join(new_url)
return new_name_url def regular(self,file_content):
'''
正则匹配跟字符串替换
'''
self.line+=1
new_str_in = re.findall(self.sed_list[2],file_content)
if len(new_str_in):
for matching_str in new_str_in:
if self.sed_list[1] == "-c":
file_content = file_content.replace(matching_str,self.sed_list[3])
print("已经替换地%s行的[ %s ]"%(self.line,matching_str))
elif self.sed_list[1] == "-d":
file_content = file_content.replace(matching_str,"")
print("已经删除地%s行的[ %s ]"%(self.line,matching_str))
else:
pass
return file_content if __name__ == "__main__":
#用于判断用户输入的参数是否正确的,通过sys.argv收集用户输入,通过参数调用不同的功能
if len(userin) == 1:
print('''
--------------参数-------------
help 帮助
-c 替换
-d 删除
支持正则,语法规则参考 Excel
-------------------------------
''')
else:
if userin[1] == "-c":
if len(userin) == 5:
file_main = File_sed(userin)
file_main.file_handling()
else:
print("参数错误 sed_main -c str newstr path")
elif userin[1] == "-d":
if len(userin) == 4:
file_main = File_sed(userin)
file_main.file_handling()
else:
print("参数错误 sed_main -d str path")
else:
print('''
--------------参数-------------
help 帮助
-c 替换
-d 删除
支持正则,语法规则参考 Excel
-------------------------------
''')

sed替换

运行结果:

下面的意思是 -c 替换 匹配当前目录下sed_test文件中  以大写W开头,接任意数字和字母,且结尾是n的字符替换成 test

python练习_sed替换的更多相关文章

  1. python字符串内容替换的方法(转载)

    python字符串内容替换的方法 时间:2016-03-10 06:30:46来源:网络 导读:python字符串内容替换的方法,包括单个字符替换,使用re正则匹配进行字符串模式查找与替换的方法.   ...

  2. Linux下Python 文件内容替换脚本

    Linux下Python 文件替换脚本 import sys,os if len(sys.argv)<=4: old_text,new_text = sys.argv[1],sys.argv[2 ...

  3. python file模块 替换输入内容脚本

    root@python-10:/home/liujianzuo/python/test# ls passwd rc.local test1 root@python-10:/home/liujianzu ...

  4. Python - 字符串的替换(interpolation) 具体解释

    字符串的插值(interpolation) 具体解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details/27054263 字符串的替换 ...

  5. python 之 批量替换文件中文本后缀

    代码示例如下: #!/usr/local/bin python import os def swapextensions(dir, before, after): if before[:1] != ' ...

  6. Python爬虫通过替换http request header来欺骗浏览器实现登录

    以豆瓣为例,访问https://www.douban.com/contacts/list 来查看自己关注的人,要登录才能查看. 如果用requests.get()方法获取这个http,没登录只能抓取回 ...

  7. python基于函数替换的热更新原理介绍

    热更新即在不重启进程或者不离开Python interpreter的情况下使得被编辑之后的python源码能够直接生效并按照预期被执行新代码.平常开发中,热更能极大提高程序开发和调试的效率,在修复线上 ...

  8. 【算法编程 C++ Python】字符串替换

    题目描述 请实现一个函数,将一个字符串中的空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy.   C++使用string,pyt ...

  9. Python补充4——替换与修改

    最近在自学Python ,在学习过程中发现一个问题,就是Python 的替换与修改. 按照中文思维,替换与修改有什么区别吗?如果发生了部分替换不就是修改了吗?如果修改了不就是新对象替换了老对象吗? 实 ...

随机推荐

  1. python学习【第十篇】单例设计模式

    单例设计模式 目的:让类创建对象,在系统中只有唯一的实例,让每一次创建的对象返回的内存地址都是相同的. __new__方法 使用类名创建对象时,python解释器首先会调用__new__方法为对象分配 ...

  2. Xmind 8 update 4 破解教程(破解补丁+破解步骤+下载地址)

    一.原始教程 原教程很详细,直接参考: http://www.voidcn.com/article/p-yyybmcqq-bnz.html 若无法访问请点击:http://df1551e3.wiz03 ...

  3. SharePoint服务器端对象模型 之 访问网站和列表数据(Part 5)

    (五)列表条目(SPListItem) SharePoint中数据的存储基本上都是通过列表条目来完成(文档库中的文档也是一种特殊的列表条目),因此在SharePoint应用开发中,最终是要和列表条目打 ...

  4. UI auto程序结构组织方式

    UI Auto分三个layer: 1. Object finding – 单独一个类,寻找到控件.因为UI auto最容易改动的就是UI界面,这样全部放到一起就便于统一修改. 2. Task - 对控 ...

  5. Tomcat 配置连接池

    1. Tomcat 配置 JNDI 资源 JNDI(Java Naming and Directory Interface), Java 命名和目录接口; JNDI 作用: 在服务器上配置资源, 然后 ...

  6. nginx反向代理三台web

    1.首先我们需要在服务器中三个不同名字,并将他们赋值 2.切换到nginx—conf  把三台机器的nginx的配置文件分别命名为web1.conf.web2.conf.web3.conf vim的赋 ...

  7. JAVA中遍历Map和Set方法,取出map中所有的key

    Java遍历Set集合 1.迭代器遍历: Set<String> set = new HashSet<String>(); Iterator<String> it ...

  8. SpringMVC:学习笔记(6)——转换器和格式化

    转换器和格式化 说明 SpringMVC的数据绑定并非没有限制,有案例表明,在SpringMVC如何正确绑定数据方面是杂乱无章的,比如在处理日期映射到Date对象上. 为了能够让SpringMVC进行 ...

  9. Python基础知识补充(重要)-作用域、特殊语法

    Python作用域 python代码内部块如if语句内声明变量,在if代码段后在调用此变量并未报如“undefinded name"此类错误,例子如下: if 1 == 1: name = ...

  10. Java底层代码实现单文件读取和写入(解决中文乱码问题)

    需求: 将"E:/data/车站一次/阿坝藏族羌族自治州.csv"文件中的内容读取,写入到"E:/data//车站一次.csv". 代码: public cla ...