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 的替换与修改. 按照中文思维,替换与修改有什么区别吗?如果发生了部分替换不就是修改了吗?如果修改了不就是新对象替换了老对象吗? 实 ...
随机推荐
- CodeIgniter框架——知识要点汇总
NO1.学习要点: 一.CodeIgniter 框架的简介 二.CodeIgniter 框架的安装 三.CodeIgniter 框架的目录结构分析 四.CodeIgniter 框架是如何工作的? 五. ...
- java数据结构之枚举
Enumeration接口中定义了一些方法,通过这些方法可以枚举(一次获得一个)对象集合中的元素. import java.util.Vector; import java.util.Enumerat ...
- Redis持久化之rdb&aof
Redis有两种持久化的方式:快照(RDB文件)和追加式文件(AOF文件) RDB持久化方式是在一个特定的间隔保存某个时间点的一个数据快照. AOF(Append only file)持久化方式则会记 ...
- cmake编译选项
1 需求 现在已经有一个cmake工程,我想要添加-O0 -g,生成gdb的调试信息和不进行代码优化. 也就是说,我该怎样修改CFLAGS和CPPFLAGS? 2 在project后面添加 set(C ...
- Git is fundamentally a content-addressable filesystem with a VCS user interface written on top of it
w “加一层去解决问题”:计算机解决问题的思路.怎样将其应用到代码中呢?比如亚马逊接口的开发. git加一UI层去实现易用性和降低用户的迁移成本. https://git-scm.com/book/e ...
- ORACLE中的MERGE语法使用记录
项目中使用到了Oracle的MERGE INTO语句,在这里简单记录下使用方法 使用场景如下: 存在对一张数据量很大的表,你需要对里面的大量数据进行更新,如果数据不存在,就进行插入的操作. 常规想到的 ...
- yum命令的实例
1) 自定义yum仓库:createrepo 2) 自定义repo文件 3) 使用yum命令安装httpd软件包(在这里需要强调一点,本身执行yum.repos.d时,文件里面是有自带的yum源的,需 ...
- (4.16)sql server迁移DB文件(同一DB内)
SQL Server 修改数据库物理文件存在位置 关键词:迁移文件,迁移temp库(这怎么迁移呢,用方法2即可,需要重启实例) 三种均需要离线: 一共分为(1)脱机迁移和(2)在线迁移. (1)迁移方 ...
- unknown facet type would you like to ignore facet from module
去idea plugin 里面把红色的插件 重新勾选一下,点apply 重启就可以了
- ABAP发邮件函数
步骤: 一.检查输入参数, (1)未指定文件類別代碼,(2)未指定郵件主題, (3)未指定郵件內容, (4)未指定發送人郵件地址, (5)未指定接收人郵件地址, 二.调用发送功能, (1)创建发送请求 ...