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 20 Python
深入解读Python解析XML的几种方式
Feb 16 Python
python操作字典类型的常用方法(推荐)
May 16 Python
在python中使用with打开多个文件的方法
Jan 07 Python
pyqt5 tablewidget 利用线程动态刷新数据的方法
Jun 17 Python
Python3搭建http服务器的实现代码
Feb 11 Python
使用python图形模块turtle库绘制樱花、玫瑰、圣诞树代码实例
Mar 16 Python
python集合的新增元素方法整理
Dec 07 Python
python实现双人五子棋(终端版)
Dec 30 Python
python实现xml转json文件的示例代码
Dec 30 Python
浅谈Python数学建模之固定费用问题
Jun 23 Python
详解Python为什么不用设计模式
Jun 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来实现一个动态Web服务器
2015/07/29 PHP
Yii框架中sphinx索引配置方法解析
2016/10/18 PHP
JavaScript Object的extend是一个常用的功能
2009/12/02 Javascript
jQuery客户端分页实例代码
2013/11/18 Javascript
js 剪切板的用法(clipboardData.setData)与js match函数介绍
2013/11/19 Javascript
js实现点击图片改变页面背景图的方法
2015/02/28 Javascript
jQuery+AJAX实现遮罩层登录验证界面(附源码)
2020/09/13 Javascript
老生常谈combobox和combotree模糊查询
2017/04/17 Javascript
基于rem的移动端响应式适配方案(详解)
2017/07/07 Javascript
浅谈JS中的反柯里化( uncurrying)
2017/08/17 Javascript
Angularjs添加排序查询功能的实例代码
2017/10/24 Javascript
基于vue+canvas的excel-like组件实例详解
2017/11/28 Javascript
浅谈node模块与npm包管理工具
2018/01/03 Javascript
js实现金山打字通小游戏
2020/07/24 Javascript
vue使用echarts实现水平柱形图实例
2020/09/09 Javascript
javascript实现智能手环时间显示
2020/09/18 Javascript
[09:13]2014DOTA2国际邀请赛 中国区预选赛coser表演
2014/05/23 DOTA
[18:16]sakonoko 2017年卡尔集锦
2018/02/06 DOTA
python学习笔记:字典的使用示例详解
2014/06/13 Python
Python六大开源框架对比
2015/10/19 Python
安装ElasticSearch搜索工具并配置Python驱动的方法
2015/12/22 Python
Python字符串的一些操作方法总结
2019/06/10 Python
django序列化serializers过程解析
2019/12/14 Python
Django 自定义404 500等错误页面的实现
2020/03/08 Python
Python Merge函数原理及用法解析
2020/09/16 Python
使用Python判断一个文件是否被占用的方法教程
2020/12/16 Python
详解HTML5中CSS外观属性
2020/09/10 HTML / CSS
印度尼西亚在线时尚购物网站:ZALORA印尼
2016/08/02 全球购物
德国的大型美妆个护电商:Flaconi
2020/06/26 全球购物
仪器仪表检测毕业生自荐信
2013/10/31 职场文书
单位人事专员介绍信
2014/01/11 职场文书
麦当劳辞职信范文
2014/01/18 职场文书
《称象》教学反思
2014/04/25 职场文书
公司放假通知怎么写
2015/04/15 职场文书
婚礼伴郎致辞
2015/07/28 职场文书
python 定义函数 返回值只取其中一个的实现
2021/05/21 Python