Python实现修改文件内容的方法分析


Posted in Python onMarch 25, 2018

本文实例讲述了Python实现修改文件内容的方法。分享给大家供大家参考,具体如下:

1 替换文件中的一行

1.1 修改原文件

① 要把文件中的一行Server=192.168.22.22中的IP地址替换掉,因此把整行替换。

data = ''
with open('zhai.conf', 'r+') as f:
  for line in f.readlines():
    if(line.find('Server') == 0):
      line = 'Server=%s' % ('192.168.1.1',) + '\n'
    data += line
with open('zhai.conf', 'r+') as f:
  f.writelines(data)

② 把原文件的hello替换成world。

#!/usr/local/bin/python
#coding:gbk
import re
old_file='/tmp/test'
fopen=open(old_file,'r')
w_str=""
for line in fopen:
  if re.search('hello',line):
    line=re.sub('hello','world',line)
    w_str+=line
  else:
    w_str+=line
print w_str
wopen=open(old_file,'w')
wopen.write(w_str)
fopen.close()
wopen.close()

1.2 临时文件来存储数据

实现如下功能:将文件中的指定子串 修改为 另外的子串

python 字符串替换可以用2种方法实现:

①是用字符串本身的方法。str.replace方法。
②用正则来替换字符串: re

方法1:

#!/usr/bin/env python
#_*_ coding:utf-8 _*_
import sys,os
if len(sys.argv)<4 or len(sys.argv)>5:
  sys.exit('There needs four or five parameters')
elif len(sys.argv)==4:
  print 'usage:./file_replace.py old_text new_text filename'
else:
  print 'usage:./file_replace.py old_text new_text filename --bak'
old_text,new_text=sys.argv[1],sys.argv[2]
file_name=sys.argv[3]
f=file(file_name,'rb')
new_file=file('.%s.bak' % file_name,'wb')#文件名以.开头的文件是隐藏文件
for line in f.xreadlines():#f.xreadlines()返回一个文件迭代器,每次只从文件(硬盘)中读一行
  new_file.write(line.replace(old_text,new_text))
f.close()
new_file.close()
if '--bak' in sys.argv: #'--bak'表示要求对原文件备份
  os.rename(file_name,'%s.bak' % file_name)  #unchanged
  os.rename('.%s.bak' % file_name,file_name)  #changed
else:
  os.rename(file_name,'wahaha.txt')#此处也可以将原文件删除,以便下一语句能够正常执行
  os.rename('.%s.bak' % file_name,file_name)

方法2:

open('file2', 'w').write(re.sub(r'world', 'python', open('file1').read()))

2 使用sed

2.1 sed命令:

sed -i "/^Server/ c\Server=192.168.0.1" zhai.conf  #-i表示在原文修改
sed -ibak "/^Server/c\Server=192.168.0.1" zhai.conf  #会生成备份文件zhai.confbak

2.2 python调用shell的方法

os.system(command)

在一个子shell中运行command命令,并返回command命令执行完毕后的退出状态。这实际上是使用C标准库函数system()实现的。这个函数在执行command命令时需要重新打开一个终端,并且无法保存command命令的执行结果。

os.popen(command,mode)

打开一个与command进程之间的管道。这个函数的返回值是一个文件对象,可以读或者写(由mode决定,mode默认是'r')。如果mode为'r',可以使用此函数的返回值调用read()来获取command命令的执行结果。

commands.getstatusoutput(command)

使用os. getstatusoutput ()函数执行command命令并返回一个元组(status,output),分别表示command命令执行的返回状态和执行结果。对command的执行实际上是按照{command;} 2>&1的方式,所以output中包含控制台输出信息或者错误信息。output中不包含尾部的换行符。

subprocess.call(["some_command","some_argument","another_argument_or_path"])
subprocess.call(command,shell=True)**

subprocess.Popen(command, shell=True)

如果command不是一个可执行文件,shell=True不可省。

使用subprocess模块可以创建新的进程,可以与新建进程的输入/输出/错误管道连通,并可以获得新建进程执行的返回状态。使用subprocess模块的目的是替代os.system()、os.popen*()、commands.*等旧的函数或模块。

最简单的方法是使用class subprocess.Popen(command,shell=True)。Popen类有Popen.stdinPopen.stdoutPopen.stderr三个有用的属性,可以实现与子进程的通信。

将调用shell的结果赋值给python变量

代码如下:

handle = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE)
print handle.communicate()[0]

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
使用Python压缩和解压缩zip文件的教程
May 06 Python
在win和Linux系统中python命令行运行的不同
Jul 03 Python
ubuntu系统下 python链接mysql数据库的方法
Jan 09 Python
Python中表达式x += y和x = x+y 的区别详解
Jun 20 Python
解决Python网页爬虫之中文乱码问题
May 11 Python
浅谈python 读excel数值为浮点型的问题
Dec 25 Python
Python实现判断一个整数是否为回文数算法示例
Mar 02 Python
使用 Django Highcharts 实现数据可视化过程解析
Jul 31 Python
python点击鼠标获取坐标(Graphics)
Aug 10 Python
PYTHON发送邮件YAGMAIL的简单实现解析
Oct 28 Python
Python jieba库用法及实例解析
Nov 04 Python
浅谈keras的深度模型训练过程及结果记录方式
Jan 24 Python
利用python为运维人员写一个监控脚本
Mar 25 #Python
python实现数据写入excel表格
Mar 25 #Python
使用requests库制作Python爬虫
Mar 25 #Python
利用Python代码实现数据可视化的5种方法详解
Mar 25 #Python
Python cookbook(数据结构与算法)同时对数据做转换和换算处理操作示例
Mar 23 #Python
教你使用python实现微信每天给女朋友说晚安
Mar 23 #Python
python微信公众号开发简单流程
Mar 23 #Python
You might like
php中如何同时使用session和cookie来保存用户登录信息
2013/07/05 PHP
php+ajax实现无刷新数据分页的办法
2015/11/02 PHP
PHP实现简单ajax Loading加载功能示例
2016/12/28 PHP
php封装的pdo数据库操作工具类与用法示例
2019/05/08 PHP
漂亮的仿flash菜单,来自蓝色经典
2006/06/26 Javascript
JavaScript中关于indexOf的使用方法与问题小结
2010/08/05 Javascript
巧用js提交表单轻松解决一个页面有多个提交按钮
2013/11/17 Javascript
NodeJS Web应用监听sock文件实例
2015/02/18 NodeJs
在JavaScript中call()与apply()区别
2016/01/22 Javascript
jquery.qtip提示信息插件用法简单实例
2016/06/17 Javascript
JavaScript兼容浏览器FF/IE技巧
2016/08/14 Javascript
BootStrap使用file-input插件上传图片的方法
2016/09/05 Javascript
浅谈javascript:两种注释,声明变量,定义函数
2016/09/29 Javascript
JavaScript严格模式详解
2017/01/16 Javascript
使用Node.js搭建静态资源服务详细教程
2017/08/02 Javascript
详解webpack + vue + node 打造单页面(入门篇)
2017/09/23 Javascript
在Python中使用matplotlib模块绘制数据图的示例
2015/05/04 Python
python实现查找excel里某一列重复数据并且剔除后打印的方法
2015/05/26 Python
Python常用知识点汇总
2016/05/08 Python
Python paramiko模块的使用示例
2018/04/11 Python
Python+selenium 获取一组元素属性值的实例
2018/06/22 Python
Python3匿名函数用法示例
2018/07/25 Python
Python实现性能自动化测试竟然如此简单
2019/07/30 Python
Python基础之字符串操作常用函数集合
2020/02/09 Python
python 常见的反爬虫策略
2020/09/27 Python
python 使用OpenCV进行简单的人像分割与合成
2021/02/02 Python
HTML5 placeholder(空白提示)属性介绍
2013/08/07 HTML / CSS
《走一步再走一步》教学反思
2014/02/15 职场文书
教师工作表现评语
2014/12/31 职场文书
2015应届毕业生自荐信范文
2015/03/05 职场文书
商标侵权律师函
2015/05/27 职场文书
XX部保密工作制度范本
2019/08/27 职场文书
导游词之太湖
2019/10/08 职场文书
你喜欢篮球吗?Python实现篮球游戏
2021/06/11 Python
Android Flutter实现3D动画效果示例详解
2022/04/07 Java/Android
sql server偶发出现死锁的解决方法
2022/04/10 SQL Server