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 24 Python
python实现多线程采集的2个代码例子
Jul 07 Python
在Python中使用base64模块处理字符编码的教程
Apr 28 Python
python通过函数属性实现全局变量的方法
May 16 Python
Python实现按学生年龄排序的实际问题详解
Aug 29 Python
python脚本生成caffe train_list.txt的方法
Apr 27 Python
python实现ID3决策树算法
Aug 29 Python
Python Datetime模块和Calendar模块用法实例分析
Apr 15 Python
Python3基础教程之递归函数简单示例
Jun 07 Python
python同时替换多个字符串方法示例
Sep 17 Python
Python局部变量与全局变量区别原理解析
Jul 14 Python
Python+Appium实现自动化清理微信僵尸好友的方法
Feb 04 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+php+mysql在windows下的安装与配置图解(最新版)
2008/11/30 PHP
php使用curl和正则表达式抓取网页数据示例
2014/04/13 PHP
基于php的微信公众平台开发入门实例
2015/04/15 PHP
PHP在线书签系统分享
2016/01/04 PHP
PHP实现的网站目录扫描索引工具
2016/09/08 PHP
Ajax+PHP实现的模拟进度条功能示例
2019/02/11 PHP
PHP根据key删除数组中指定的元素
2019/02/28 PHP
Javascript 强制类型转换函数
2009/05/17 Javascript
映彩衣的js随笔(js图片切换效果)
2011/07/31 Javascript
jquery 文本上下无缝滚动,鼠标放上去就停止 小例子
2013/06/05 Javascript
js中自定义方法实现停留几秒sleep
2014/07/11 Javascript
不得不分享的JavaScript常用方法函数集(下)
2015/12/25 Javascript
浅谈JavaScript 执行环境、作用域及垃圾回收
2016/05/31 Javascript
JQuery实现DIV其他动画效果的简单实例
2016/09/18 Javascript
通过扫描二维码打开app的实现代码
2016/11/10 Javascript
利用Vue v-model实现一个自定义的表单组件
2017/04/27 Javascript
微信小程序后台解密用户数据实例详解
2017/06/28 Javascript
angular中实现li或者某个元素点击变色的两种方法
2017/07/27 Javascript
vue项目中引入noVNC远程桌面的方法
2018/03/05 Javascript
vue2.0 + ele的循环表单及验证字段方法
2018/09/18 Javascript
python for 循环获取index索引的方法
2019/02/01 Python
python 返回一个列表中第二大的数方法
2019/07/09 Python
python采集百度搜索结果带有特定URL的链接代码实例
2019/08/30 Python
将python安装信息加入注册表的示例
2019/11/20 Python
tensorflow实现二维平面模拟三维数据教程
2020/02/11 Python
基于python纯函数实现井字棋游戏
2020/05/27 Python
为什么称python为胶水语言
2020/06/16 Python
python3环境搭建过程(利用Anaconda+pycharm)完整版
2020/08/19 Python
Python爬取某平台短视频的方法
2021/02/08 Python
高清屏中使用Canvas绘图出现模糊的问题及解决方法
2019/06/03 HTML / CSS
请问软件开发中的设计模式你会使用哪些
2015/05/13 面试题
职业生涯规划怎么写
2013/12/29 职场文书
公安交警中队队长个人对照检查材料思想汇报
2014/10/05 职场文书
2015年英语教学工作总结
2015/05/25 职场文书
2016八一建军节慰问信
2015/11/30 职场文书
解析MySQL索引的作用
2022/03/03 MySQL