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的web.py框架下的application.py模块
May 02 Python
Python2.x版本中基本的中文编码问题解决
Oct 12 Python
Python中字符串的格式化方法小结
May 03 Python
Python编写简单的HTML页面合并脚本
Jul 11 Python
pandas 小数位数 精度的处理方法
Jun 09 Python
python双端队列原理、实现与使用方法分析
Nov 27 Python
python二元表达式用法
Dec 04 Python
python保留小数位的三种实现方法
Jan 07 Python
python实现信号时域统计特征提取代码
Feb 26 Python
Python在终端通过pip安装好包以后在Pycharm中依然无法使用的问题(三种解决方案)
Mar 10 Python
Python小白学习爬虫常用请求报头
Jun 03 Python
python 如何在list中找Topk的数值和索引
May 20 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 curl模拟post请求小实例
2013/11/13 PHP
分享PHP-pcntl 实现多进程代码
2016/09/30 PHP
PHP7匿名类的用法示例
2019/04/05 PHP
PHP pthreads v3下worker和pool的使用方法示例
2020/02/21 PHP
jquery插件制作 自增长输入框实现代码
2012/08/17 jQuery
体验js中splice()的强大(插入、删除或替换数组的元素)
2013/01/16 Javascript
JavaScript 上万关键字瞬间匹配实现代码
2013/07/07 Javascript
判断js对象是否拥有某一个属性的js代码
2013/08/16 Javascript
javascript/jquery获取地址栏url参数的方法
2014/03/05 Javascript
一个支持任意尺寸的图片上下左右滑动效果
2014/08/24 Javascript
基于jQuery实现下拉框
2014/11/24 Javascript
require简单实现单页应用程序(SPA)
2016/07/12 Javascript
jQuery双向列表选择器DIV模拟版
2016/11/01 Javascript
微信小程序 后台登录(非微信账号)实例详解
2017/03/31 Javascript
AngularJS路由删除#符号解决的办法
2017/09/28 Javascript
vue项目实现github在线预览功能
2018/06/20 Javascript
VueCli3构建TS项目的方法步骤
2018/11/07 Javascript
Cpy和Python的效率对比
2015/03/20 Python
浅谈python的dataframe与series的创建方法
2018/11/12 Python
Python基本socket通信控制操作示例
2019/01/30 Python
Python matplotlib 绘制双Y轴曲线图的示例代码
2020/06/12 Python
Django中和时区相关的安全问题详解
2020/10/12 Python
《小猫刮胡子》教学反思
2014/02/21 职场文书
公证委托书模板
2014/04/03 职场文书
环保建议书500字
2014/05/14 职场文书
最美乡村医生事迹材料
2014/06/02 职场文书
学校法制宣传月活动总结
2014/07/03 职场文书
贷款委托书
2014/08/01 职场文书
村委会贫困证明范文
2014/09/21 职场文书
红色经典电影观后感
2015/06/18 职场文书
2015年学校少先队工作总结
2015/07/20 职场文书
公司致全体员工的感谢信
2019/06/24 职场文书
Mysql 如何查询时间段交集
2021/06/08 MySQL
python实现A*寻路算法
2021/06/13 Python
浅析MySQL如何实现事务隔离
2021/06/26 MySQL
springboot使用Redis作缓存使用入门教程
2021/07/25 Redis