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 isinstance函数介绍
Apr 14 Python
Python爬虫之xlml解析库(全面了解)
Aug 08 Python
Python实现螺旋矩阵的填充算法示例
Dec 28 Python
django 删除数据库表后重新同步的方法
May 27 Python
python3.5基于TCP实现文件传输
Mar 20 Python
我喜欢你 抖音表白程序python版
Apr 07 Python
关于sys.stdout和print的区别详解
Dec 05 Python
使用python的pyplot绘制函数实例
Feb 13 Python
Python 实现Image和Ndarray互相转换
Feb 19 Python
python3 deque 双向队列创建与使用方法分析
Mar 24 Python
Python中使用threading.Event协调线程的运行详解
May 02 Python
python爬虫快速响应服务器的做法
Nov 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
php面向对象全攻略 (十五) 多态的应用
2009/09/30 PHP
ThinkPHP 3.2 数据分页代码分享
2014/10/14 PHP
php+mysql数据库实现无限分类的方法
2014/12/12 PHP
织梦sitemap地图实时推送给百度的教程
2015/08/03 PHP
php下的原生ajax请求用法实例分析
2020/02/28 PHP
javascript温习的一些笔记 基础常用知识小结
2011/06/22 Javascript
jsvascript图像处理—(计算机视觉应用)图像金字塔
2013/01/15 Javascript
javascript ie6兼容position:fixed实现思路
2013/04/01 Javascript
详解JavaScript中shift()方法的使用
2015/06/09 Javascript
微信小程序 数据访问实例详解
2016/10/08 Javascript
Vue.js学习之过滤器详解
2017/01/22 Javascript
nodejs中向HTTP响应传送进程的输出
2017/03/19 NodeJs
用nodejs实现json和jsonp服务的方法
2017/08/25 NodeJs
vue中导出Excel表格的实现代码
2018/10/18 Javascript
说说如何在Vue.js中实现数字输入组件的方法
2019/01/08 Javascript
jQuery Ajax async=&gt;false异步改为同步时,解决导致浏览器假死的问题
2019/07/22 jQuery
详解webpack引用jquery(第三方模块)的三种办法
2019/08/21 jQuery
微信内置开发 iOS修改键盘换行为搜索的解决方案
2019/11/06 Javascript
JS正则表达式验证端口范围(0-65535)
2020/01/06 Javascript
[07:57]2018DOTA2国际邀请赛寻真——PSG.LGD凤凰浴火
2018/08/12 DOTA
[06:48]DOTA2-DPC中国联赛2月26日Recap集锦
2021/03/11 DOTA
在漏洞利用Python代码真的很爽
2007/08/26 Python
python merge、concat合并数据集的实例讲解
2018/04/12 Python
numpy.std() 计算矩阵标准差的方法
2018/07/11 Python
在Python中获取两数相除的商和余数方法
2018/11/10 Python
python导入模块交叉引用的方法
2019/01/19 Python
详解Python 中sys.stdin.readline()的用法
2019/09/12 Python
TensorFlow设置日志级别的几种方式小结
2020/02/04 Python
Chain Reaction Cycles芬兰:世界上最大的在线自行车商店
2017/12/06 全球购物
Kathmandu新西兰官网:新西兰户外运动品牌
2019/07/27 全球购物
What's the difference between an interface and abstract class? (接口与抽象类有什么区别)
2012/10/29 面试题
公司运动会策划方案
2014/05/25 职场文书
React配置子路由的实现
2021/06/03 Javascript
新手入门Mysql--sql执行过程
2021/06/20 MySQL
Nginx防盗链与服务优化配置的全过程
2022/01/18 Servers
Python通用验证码识别OCR库ddddocr的安装使用教程
2022/07/07 Python