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 25 Python
浅谈python中set使用
Jun 30 Python
分享Pycharm中一些不为人知的技巧
Apr 03 Python
Python中fnmatch模块的使用详情
Nov 30 Python
Python自定义函数计算给定日期是该年第几天的方法示例
May 30 Python
python如何以表格形式打印输出的方法示例
Jun 21 Python
Pandas 解决dataframe的一列进行向下顺移问题
Dec 27 Python
Python更新所有已安装包的操作
Feb 13 Python
Python调用shell命令常用方法(4种)
May 11 Python
Python-openCV开运算实例
Jul 05 Python
在django中查询获取数据,get, filter,all(),values()操作
Aug 09 Python
Python WSGI 规范简介
Apr 11 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
Terran兵种对照表
2020/03/14 星际争霸
用libtemplate实现静态网页生成
2006/10/09 PHP
php4的session功能评述(三)
2006/10/09 PHP
PHP性能优化准备篇图解PEAR安装
2011/12/05 PHP
一个基于phpQuery的php通用采集类分享
2014/04/09 PHP
ThinkPHP3.1新特性之命名范围的使用
2014/06/19 PHP
PHP 文件锁与进程锁的使用示例
2017/08/07 PHP
php中如何执行linux命令详解
2018/11/06 PHP
JQuery打造PHP的AJAX表单提交实例
2009/11/03 Javascript
javascript Array.sort() 跨浏览器下需要考虑的问题
2009/12/07 Javascript
简介JavaScript中getUTCMonth()方法的使用
2015/06/10 Javascript
js计算文本框输入的字符数
2015/10/23 Javascript
js验证框架实现代码分享
2016/05/18 Javascript
9个让JavaScript调试更简单的Console命令
2016/11/14 Javascript
javascript DOM的详解及实例代码
2017/03/06 Javascript
JS实现的简单表单验证功能示例
2017/10/13 Javascript
JS实现区分中英文并统计字符个数的方法示例
2018/06/09 Javascript
vue路由传参三种基本方式详解
2019/12/09 Javascript
[01:14:05]《加油DOTA》第四期
2014/08/25 DOTA
[00:43]魔廷新尊——痛苦女王至宝捆绑包
2020/06/12 DOTA
[01:04:02]DOTA2-DPC中国联赛 正赛 Elephant vs IG BO3 第二场 1月24日
2021/03/11 DOTA
一个基于flask的web应用诞生 用户注册功能开发(5)
2017/04/11 Python
python flask实现分页效果
2017/06/27 Python
Python3实现计算两个数组的交集算法示例
2019/04/03 Python
详解Python匿名函数(lambda函数)
2019/04/19 Python
Python通过正则库爬取淘宝商品信息代码实例
2020/03/02 Python
Python获取对象属性的几种方式小结
2020/03/12 Python
使用CSS3的box-sizing属性解决div宽高被内边距撑开的问题
2016/06/28 HTML / CSS
用JAVA实现一种排序,JAVA类实现序列化的方法(二种)
2014/04/23 面试题
财务管理专业应届毕业生求职信
2013/09/22 职场文书
小学教师岗位职责
2013/11/25 职场文书
师范生求职自荐信
2014/06/14 职场文书
2014年信息宣传工作总结
2014/12/18 职场文书
常住证明范本
2015/06/23 职场文书
vue.js Router中嵌套路由的实用示例
2021/06/27 Vue.js
css中z-index: 0和z-index: auto的区别
2021/08/23 HTML / CSS