python练习_sed替换
python练习_sed替换
需求:
- 做一个sed替换小程序,实现在windows下可以与实现linux中sed替换的功能
- 支持正则(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替换的更多相关文章
- python字符串内容替换的方法(转载)
python字符串内容替换的方法 时间:2016-03-10 06:30:46来源:网络 导读:python字符串内容替换的方法,包括单个字符替换,使用re正则匹配进行字符串模式查找与替换的方法. ...
- Linux下Python 文件内容替换脚本
Linux下Python 文件替换脚本 import sys,os if len(sys.argv)<=4: old_text,new_text = sys.argv[1],sys.argv[2 ...
- python file模块 替换输入内容脚本
root@python-10:/home/liujianzuo/python/test# ls passwd rc.local test1 root@python-10:/home/liujianzu ...
- Python - 字符串的替换(interpolation) 具体解释
字符串的插值(interpolation) 具体解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details/27054263 字符串的替换 ...
- python 之 批量替换文件中文本后缀
代码示例如下: #!/usr/local/bin python import os def swapextensions(dir, before, after): if before[:1] != ' ...
- Python爬虫通过替换http request header来欺骗浏览器实现登录
以豆瓣为例,访问https://www.douban.com/contacts/list 来查看自己关注的人,要登录才能查看. 如果用requests.get()方法获取这个http,没登录只能抓取回 ...
- python基于函数替换的热更新原理介绍
热更新即在不重启进程或者不离开Python interpreter的情况下使得被编辑之后的python源码能够直接生效并按照预期被执行新代码.平常开发中,热更能极大提高程序开发和调试的效率,在修复线上 ...
- 【算法编程 C++ Python】字符串替换
题目描述 请实现一个函数,将一个字符串中的空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. C++使用string,pyt ...
- Python补充4——替换与修改
最近在自学Python ,在学习过程中发现一个问题,就是Python 的替换与修改. 按照中文思维,替换与修改有什么区别吗?如果发生了部分替换不就是修改了吗?如果修改了不就是新对象替换了老对象吗? 实 ...
随机推荐
- iOS学习笔记(十一)——JSON数据解析
在之前的<iOS学习——xml数据解析(九)>介绍了xml数据解析,这一篇简单介绍一下Json数据解析.JSON 即 JavaScript Object Natation,它是一种轻量级的 ...
- 【BZOJ3995】[SDOI2015]道路修建 线段树区间合并
[BZOJ3995][SDOI2015]道路修建 Description 某国有2N个城市,这2N个城市构成了一个2行N列的方格网.现在该国政府有一个旅游发展计划,这个计划需要选定L.R两列(L&l ...
- Kubectl工具常用命令
创建namesapce kubectl create namespace {name} 注意:name只能为小写字母.数字和-的组合,且开头结尾为字母,一般格式为my-name 123-abc等. 创 ...
- set集合可以添加重复元素
set集合判断元素的唯一性要重写hashcode和equals方法,这样就能保证不会加入重复的元素, 但是在以下这种情况下任然可以加入重复元素,即使他们的hashcode和equals方法结果相同 p ...
- 谷歌浏览器input中的text 和 button 水平对齐的问题
方法一 text 的vertical-align :top; 方法二 button的vertical-align: middle;
- js内置数据类型
JS 中分为七种内置类型,七种内置类型又分为两大类型:基本类型和对象(Object). 基本类型有六种: number , string , boolean , null , undefined , ...
- Linux中的判断式
格式一:test [参数] 判断内容格式二:[ [参数] 判断内容 ] 说明: a.格式二可以认为是格式一的缩写 b.格式二里中括号和内容之间要有空格 基于文件的判断-d 判断文件是否存在,并且是目录 ...
- 关于android编程中service和activity的区别
一. 绝大部分情况下,Service的作用是用来“执行”后台的.耗时的.重要的任务,三者缺一不可,而最重要的原因是第三点:要执行重要的任务. 因为当一个进程启动了Service后,进程的优先级变高了, ...
- Java基础—运算符(转载)
转载自:Java运算符 计算机的最基本用途之一就是执行数学运算,作为一门计算机语言,Java也提供了一套丰富的运算符来操纵变量.我们可以把运算符分成以下几组: 算术运算符 关系运算符 位运算符 逻辑运 ...
- Scrapy框架2
一.进程.线程.协成 1.进程.线程.协成之间的关系 1. 线程是计算机中最小的工作单元. 2. 进程是提供资源供n个线程使用,即进程是最小的管理单元. ...