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动态加载变量示例分享
Feb 17 Python
深入理解Javascript中的this关键字
Mar 27 Python
python计算N天之后日期的方法
Mar 31 Python
Python中的Classes和Metaclasses详解
Apr 02 Python
简单介绍使用Python解析并修改XML文档的方法
Oct 15 Python
Python编程中使用Pillow来处理图像的基础教程
Nov 20 Python
python控制windows剪贴板,向剪贴板中写入图片的实例
May 31 Python
基于DataFrame改变列类型的方法
Jul 25 Python
PyTorch基本数据类型(一)
May 22 Python
python实现单链表的方法示例
Sep 03 Python
Python hmac模块使用实例解析
Dec 24 Python
PyQt5 如何让界面和逻辑分离的方法
Mar 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
CodeIgniter图像处理类的深入解析
2013/06/17 PHP
php cookie用户登录的详解及实例代码
2017/01/03 PHP
基于PHP实现邮箱验证激活过程详解
2020/10/28 PHP
用js实现控制内容的向上向下滚动效果
2007/06/26 Javascript
让textarea自动调整大小的js代码
2011/04/12 Javascript
JS继承 笔记
2011/07/13 Javascript
JavaScript获取浏览器信息的方法
2015/11/20 Javascript
JS中生成随机数的用法及相关函数
2016/01/09 Javascript
JS实现兼容各种浏览器的高级拖动方法完整实例【测试可用】
2016/06/21 Javascript
AngularJS基础 ng-selected 指令简单示例
2016/08/03 Javascript
微信 java 实现js-sdk 图片上传下载完整流程
2016/10/21 Javascript
jQuery快速高效制作网页交互特效
2017/02/24 Javascript
JS检测数组类型的方法小结
2017/03/14 Javascript
ES6新特性之模块Module用法详解
2017/04/01 Javascript
AngularJS使用ng-class动态增减class样式的方法示例
2017/05/18 Javascript
微信小程序自定义toast组件的方法详解【含动画】
2019/05/11 Javascript
Python中join和split用法实例
2015/04/14 Python
Python中exit、return、sys.exit()等使用实例和区别
2015/05/28 Python
不知道这5种下划线的含义,你就不算真的会Python!
2018/10/09 Python
学习python可以干什么
2019/02/26 Python
ipad上运行python的方法步骤
2019/10/12 Python
python编写计算器功能
2019/10/25 Python
wxPython实现绘图小例子
2019/11/19 Python
浅谈Keras的Sequential与PyTorch的Sequential的区别
2020/06/17 Python
python爬虫中url管理器去重操作实例
2020/11/30 Python
专门出售各种儿童读物的网站:Put Me In The Story
2016/08/07 全球购物
Camille Jewelry官网:现代女性时尚首饰
2019/07/07 全球购物
奥地利智能家居和智能生活网上商店:tink.at
2019/10/07 全球购物
庆元旦迎新年广播稿
2014/02/18 职场文书
书香校园活动方案
2014/02/28 职场文书
《花木兰》教学反思
2014/04/09 职场文书
大学军训自我鉴定大全
2014/09/18 职场文书
政协会议宣传标语
2014/10/09 职场文书
公司回复函格式
2015/07/14 职场文书
yolov5返回坐标的方法实例
2022/03/17 Python
Mybatis-plus配置分页插件返回统一结果集
2022/06/21 Java/Android