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在Windows8下获取本机ip地址的方法
Mar 14 Python
python flask实现分页效果
Jun 27 Python
python实现读取excel写入mysql的小工具详解
Nov 20 Python
Python分析学校四六级过关情况
Nov 22 Python
Anaconda下配置python+opencv+contribx的实例讲解
Aug 06 Python
手把手教你使用Python创建微信机器人
Apr 29 Python
Python3.5文件读与写操作经典实例详解
May 01 Python
python控制台实现tab补全和清屏的例子
Aug 20 Python
对django 2.x版本中models.ForeignKey()外键说明介绍
Mar 30 Python
pandas分批读取大数据集教程
Jun 06 Python
Python趣味入门教程之循环语句while
Aug 26 Python
Elasticsearch 数据类型及管理
Apr 19 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
一个取得文件扩展名的函数
2006/10/09 PHP
一道关于php变量引用的面试题
2010/08/08 PHP
ubuntu12.04使用c编写php扩展模块教程分享
2013/12/25 PHP
Symfony生成二维码的方法
2016/02/04 PHP
thinkPHP中U方法加密传递参数功能示例
2018/05/29 PHP
nodejs创建web服务器之hello world程序
2015/08/20 NodeJs
jquery实现在网页指定区域显示自定义右键菜单效果
2015/08/25 Javascript
jQuery+Ajax实现无刷新分页
2015/10/30 Javascript
jQuery中hover与mouseover和mouseout的区别分析
2015/12/24 Javascript
JS如何生成一个不重复的ID的函数
2016/12/25 Javascript
Webpack打包慢问题的完美解决方法
2017/03/16 Javascript
jQuery实现广告条滚动效果
2017/08/22 jQuery
Vue-router结合transition实现app前进后退动画切换效果的实例
2017/10/11 Javascript
jquery使用iscorll实现上拉、下拉加载刷新
2017/10/26 jQuery
详解react、redux、react-redux之间的关系
2018/04/11 Javascript
详解vue中多个有顺序要求的异步操作处理
2019/10/29 Javascript
JavaScript This指向问题详解
2019/11/25 Javascript
基于jquery实现彩色投票进度条代码解析
2020/08/26 jQuery
[48:46]完美世界DOTA2联赛PWL S2 SZ vs FTD.C 第二场 11.19
2020/11/19 DOTA
编写Python脚本来获取Google搜索结果的示例
2015/05/04 Python
Python使用bs4获取58同城城市分类的方法
2015/07/08 Python
Python网络爬虫出现乱码问题的解决方法
2017/01/05 Python
用Python和WordCloud绘制词云的实现方法(内附让字体清晰的秘笈)
2019/01/08 Python
Python shutil模块用法实例分析
2019/10/02 Python
美国新兴城市生活方式零售商:VILLA
2017/12/06 全球购物
电子商务应届生自我鉴定
2014/01/13 职场文书
大二法学专业职业生涯规划范文
2014/02/12 职场文书
市场营销专业大学生职业生涯规划文
2014/03/06 职场文书
春节超市活动方案
2014/08/14 职场文书
我是一名护士演讲稿
2014/08/28 职场文书
物理分数没达标检讨书
2014/09/13 职场文书
个人事迹材料范文
2014/12/29 职场文书
教师考核评语大全
2014/12/31 职场文书
中秋客户感谢信
2015/01/22 职场文书
幼儿园教研工作总结2015
2015/05/12 职场文书
工作报告范文
2019/06/20 职场文书