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 多线程应用介绍
Dec 19 Python
Python中list初始化方法示例
Sep 18 Python
使用Python写一个小游戏
Apr 02 Python
详解Python中的正则表达式
Jul 08 Python
python K近邻算法的kd树实现
Sep 06 Python
利用python和ffmpeg 批量将其他图片转换为.yuv格式的方法
Jan 08 Python
python实现ip代理池功能示例
Jul 05 Python
使用python批量修改文件名的方法(视频合并时)
Mar 24 Python
python字符串反转的四种方法详解
Dec 02 Python
pytorch查看torch.Tensor和model是否在CUDA上的实例
Jan 03 Python
python GUI库图形界面开发之PyQt5控件QTableWidget详细使用方法与属性
Feb 25 Python
django rest framework serializers序列化实例
May 13 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
当年上海收录机产品生产,进口和价格情况
2021/03/04 无线电
php设计模式 Bridge (桥接模式)
2011/06/26 PHP
ThinkPHP访问不存在的模块跳转到404页面的方法
2014/06/19 PHP
详解WordPress中用于合成数组的wp_parse_args()函数
2015/12/18 PHP
php自定义函数实现二维数组排序功能
2016/07/20 PHP
PHP+原生态ajax实现的省市联动功能详解
2017/08/15 PHP
PHP实现与java 通信的插件使用教程
2019/08/11 PHP
jQuery的css()方法用法实例
2014/12/24 Javascript
javascript事件委托的方式绑定详解
2015/06/10 Javascript
Javascript编程中几种继承方式比较分析
2015/11/28 Javascript
基于jquery实现省市区三级联动效果
2015/12/25 Javascript
jQuery实现点击水纹波动动画
2016/04/10 Javascript
详解node Async/Await 更好的异步编程解决方案
2018/05/10 Javascript
详解webpack-dev-server使用方法
2018/09/14 Javascript
p5.js码绘“跳动的小正方形”的实现代码
2019/10/22 Javascript
python3新特性函数注释Function Annotations用法分析
2016/07/28 Python
Python yield 使用方法浅析
2017/05/20 Python
Python3 socket同步通信简单示例
2017/06/07 Python
pyqt5自定义信号实例解析
2018/01/31 Python
Python实现将多个空格换为一个空格.md的方法
2018/12/20 Python
Python数据预处理之数据规范化(归一化)示例
2019/01/08 Python
浅谈pytorch grad_fn以及权重梯度不更新的问题
2019/08/20 Python
python列表推导和生成器表达式知识点总结
2020/01/10 Python
如何使用Python抓取网页tag操作
2020/02/14 Python
使用tensorflow进行音乐类型的分类
2020/08/14 Python
Python配置pip国内镜像源的实现
2020/08/20 Python
施华洛世奇美国官网:SWAROVSKI美国
2018/02/08 全球购物
《学会待客》教学反思
2014/02/22 职场文书
总账会计岗位职责
2014/03/13 职场文书
运动会开幕式主持词
2014/03/28 职场文书
2014组织生活会方案
2014/05/19 职场文书
摄影展策划方案
2014/06/02 职场文书
师德师风心得体会(2016精选篇)
2016/01/12 职场文书
装修安全责任协议书
2016/03/22 职场文书
八年级作文之我的母亲
2019/12/10 职场文书
Python爬虫入门案例之爬取二手房源数据
2021/10/16 Python