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基础教程之简单入门说明(变量和控制语言使用方法)
Mar 25 Python
浅谈pytorch和Numpy的区别以及相互转换方法
Jul 26 Python
python 检查是否为中文字符串的方法
Dec 28 Python
使用Python和Prometheus跟踪天气的使用方法
May 06 Python
Python之pymysql的使用小结
Jul 01 Python
python读出当前时间精度到秒的代码
Jul 05 Python
python实现名片管理器的示例代码
Dec 17 Python
scrapy爬虫:scrapy.FormRequest中formdata参数详解
Apr 30 Python
django rest framework serializers序列化实例
May 13 Python
如何通过命令行进入python
Jul 06 Python
python实现学生通讯录管理系统
Feb 25 Python
Python中的np.argmin()和np.argmax()函数用法
Jun 02 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遍历数组的几种方法
2012/03/22 PHP
Javascript 篱式条件判断
2008/08/22 Javascript
javascript 贪吃蛇实现代码
2008/11/22 Javascript
jquery 操作日期、星期、元素的追加的实现代码
2012/02/07 Javascript
JavaScript实现自己的DOM选择器原理及代码
2013/03/04 Javascript
javascript得到当前页的来路即前一页地址的方法
2014/02/18 Javascript
基于jQuery+Cookie实现的防止刷新的在线考试倒计时
2015/06/19 Javascript
CSS或者JS实现鼠标悬停显示另一元素
2016/01/22 Javascript
jQuery移动端日期(datedropper)和时间(timedropper)选择器附源码下载
2016/04/19 Javascript
jQuery使用$获取对象后检查该对象是否存在的实现方法
2016/09/04 Javascript
Javascript自定义事件详解
2017/01/13 Javascript
微信小程序封装http访问网络库实例代码
2017/05/24 Javascript
nodejs中密码加密处理操作详解
2018/03/20 NodeJs
vue 中引用gojs绘制E-R图的方法示例
2018/08/24 Javascript
微信小程序签到功能
2018/10/31 Javascript
jQuery实现的3D版图片轮播示例【滑动轮播】
2019/01/18 jQuery
Vue指令v-for遍历输出JavaScript数组及json对象的常见方式小结
2019/02/11 Javascript
vue 检测用户上传图片宽高的方法
2020/02/06 Javascript
vue 使用 v-model 双向绑定父子组件的值遇见的问题及解决方案
2021/03/01 Vue.js
简单介绍Python中的filter和lambda函数的使用
2015/04/07 Python
Django自定义分页效果
2017/06/27 Python
Python tkinter事件高级用法实例
2018/01/31 Python
Python异步操作MySQL示例【使用aiomysql】
2019/05/16 Python
Python3 串口接收与发送16进制数据包的实例
2019/06/12 Python
Pyspark获取并处理RDD数据代码实例
2020/03/27 Python
Django实现whoosh搜索引擎使用jieba分词
2020/04/08 Python
python 实用工具状态机transitions
2020/11/21 Python
CSS3中Animation动画属性用法详解
2016/07/04 HTML / CSS
谈一谈HTML5本地存储技术
2016/03/02 HTML / CSS
美国在线艺术商店:HandmadePiece
2020/11/06 全球购物
高校生生产实习自我鉴定
2013/09/21 职场文书
法律专业推荐信范文
2013/11/29 职场文书
元旦晚会主持词
2014/03/24 职场文书
小学生操行评语大全
2014/04/22 职场文书
校长师德师风自我剖析材料
2014/09/29 职场文书
刑事辩护授权委托书范本
2014/10/17 职场文书