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中XlsxWriter模块简介与用法分析
Apr 24 Python
Python解析并读取PDF文件内容的方法
May 08 Python
解决Python pandas df 写入excel 出现的问题
Jul 04 Python
解决Python print输出不换行没空格的问题
Nov 14 Python
python 控制Asterisk AMI接口外呼电话的例子
Aug 08 Python
pandas之分组groupby()的使用整理与总结
Jun 18 Python
简述 Python 的类和对象
Aug 21 Python
python 实现音频叠加的示例
Oct 29 Python
python编程的核心知识点总结
Feb 08 Python
Python中json.dumps()函数的使用解析
May 17 Python
python自动化八大定位元素讲解
Jul 09 Python
Python使用psutil库对系统数据进行采集监控的方法
Aug 23 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
本地计算机无法启动Apache故障处理
2014/08/08 PHP
Yii CFileCache 获取不到值的原因分析
2017/02/08 PHP
jQuery入门知识简介
2010/03/04 Javascript
stream.js 一个很小、完全独立的Javascript类库
2011/10/28 Javascript
在js文件中如何获取basePath处理js路径问题
2013/07/10 Javascript
javascript自定义的addClass()方法
2014/05/28 Javascript
jquery图片倾斜层叠切换特效代码分享
2015/08/27 Javascript
JS实现的竖向折叠菜单代码
2015/10/21 Javascript
javascript对象的创建和访问
2016/03/08 Javascript
jQuery与JS加载事件用法分析
2016/09/04 Javascript
需要牢记的JavaScript基础知识
2016/09/25 Javascript
servlet+jquery实现文件上传进度条示例代码
2017/01/25 Javascript
js实现一键复制功能
2017/03/16 Javascript
JS 插件dropload下拉刷新、上拉加载使用小结
2017/04/13 Javascript
AngularJS自定义指令之复制指令实现方法
2017/05/18 Javascript
Vue2.0 从零开始_环境搭建操作步骤
2017/06/14 Javascript
基于bootstrap写的一点localStorage本地储存
2017/11/21 Javascript
vue小白入门教程
2018/04/02 Javascript
在vue中使用公共过滤器filter的方法
2018/06/26 Javascript
取消Bootstrap的dropdown-menu点击默认关闭事件方法
2018/08/10 Javascript
JS基于开关思想实现的数组去重功能【案例】
2019/02/18 Javascript
vue3中轻松实现switch功能组件的全过程
2021/01/07 Vue.js
phpsir 开发 一个检测百度关键字网站排名的python 程序
2009/09/17 Python
python通过自定义isnumber函数判断字符串是否为数字的方法
2015/04/23 Python
Django 数据库同步操作技巧详解
2019/07/19 Python
把django中admin后台界面的英文修改为中文显示的方法
2019/07/26 Python
Python获取统计自己的qq群成员信息的方法
2019/11/15 Python
Python log模块logging记录打印用法解析
2020/01/20 Python
python词云库wordCloud使用方法详解(解决中文乱码)
2020/02/17 Python
怎样客观的做好自我评价
2013/12/28 职场文书
办公室人员先进事迹
2014/01/27 职场文书
硕士研究生求职自荐信范文
2014/03/11 职场文书
车辆工程专业求职信
2014/06/14 职场文书
5s标语大全
2014/06/23 职场文书
优秀少先队员事迹材料
2014/12/24 职场文书
MySQL数据库如何使用Shell进行连接
2022/04/12 MySQL