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字符串和文件操作常用函数分析
Apr 08 Python
Python判断直线和矩形是否相交的方法
Jul 14 Python
Python之str操作方法(详解)
Jun 19 Python
Python实现购物车功能的方法分析
Nov 10 Python
Python3实现的爬虫爬取数据并存入mysql数据库操作示例
Jun 06 Python
实例讲解python中的序列化知识点
Oct 08 Python
django 自定义filter 判断if var in list的例子
Aug 20 Python
python、PyTorch图像读取与numpy转换实例
Jan 13 Python
使用 Python 读取电子表格中的数据实例详解
Apr 17 Python
基于opencv实现简单画板功能
Aug 02 Python
anaconda升级sklearn版本的实现方法
Feb 22 Python
Python基础之进程详解
May 21 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
Laravel 简单实现Ajax滚动加载示例
2019/10/22 PHP
JavaScript 应用类库代码
2008/06/02 Javascript
Javascript 匿名函数及其代码模式原理
2010/03/19 Javascript
基于JQuery的类似新浪微博展示信息效果的代码
2012/07/23 Javascript
JS自动缩小超出大小的图片
2012/10/12 Javascript
一个Action如何调用两个不同的方法
2014/05/22 Javascript
使用jQuery的attr方法来修改onclick值
2014/07/07 Javascript
js实现点击图片将图片地址复制到粘贴板的方法
2015/02/16 Javascript
JavaScript操作Cookie详解
2015/02/28 Javascript
jQuery抛物线运动实现方法(附完整demo源码下载)
2016/01/08 Javascript
js实现数组内数据的上移和下移的实例
2017/11/14 Javascript
jQuery选择器之基本过滤选择器用法实例分析
2019/02/19 jQuery
Node.js折腾记一:读指定文件夹,输出该文件夹的文件树详解
2019/04/20 Javascript
Vue事件修饰符native、self示例详解
2019/07/09 Javascript
详解Python中find()方法的使用
2015/05/18 Python
全面解析Python的While循环语句的使用方法
2015/10/13 Python
Python画图学习入门教程
2016/07/01 Python
Python 判断文件或目录是否存在的实例代码
2018/07/19 Python
Python3离线安装Requests模块问题
2019/10/13 Python
FFT快速傅里叶变换的python实现过程解析
2019/10/21 Python
如何基于Python制作有道翻译小工具
2019/12/16 Python
Python3 全自动更新已安装的模块实现
2020/01/06 Python
Python 面向对象静态方法、类方法、属性方法知识点小结
2020/03/09 Python
CSS3弹性盒模型flex box快速入门心得(必看篇)
2016/05/24 HTML / CSS
浅析border-radius如何兼容IE
2016/04/19 HTML / CSS
凯伦·米莲女装网上商店:Karen Millen
2017/11/07 全球购物
客户代表实习人员自我鉴定
2013/09/27 职场文书
学前班教师的自我鉴定
2013/12/05 职场文书
自荐信的基本格式
2014/02/22 职场文书
股东出资证明书范例
2014/10/04 职场文书
党的群众路线教育实践活动个人整改措施范文
2014/11/04 职场文书
物业项目经理岗位职责
2015/04/01 职场文书
门球健将观后感
2015/06/16 职场文书
2015年环卫处个人工作总结
2015/07/27 职场文书
【DOTA2】总决赛血虐~ XTREME GAMING vs MAGMA - OGA DOTA PIT 2022 CN
2022/04/02 DOTA
MySQL 数据表操作
2022/05/04 MySQL