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删除空文件和空文件夹的方法
Jul 14 Python
Python使用遗传算法解决最大流问题
Jan 29 Python
pygame实现简易飞机大战
Sep 11 Python
解决pandas .to_excel不覆盖已有sheet的问题
Dec 10 Python
Python一行代码实现快速排序的方法
Apr 30 Python
python函数与方法的区别总结
Jun 23 Python
python3的数据类型及数据类型转换实例详解
Aug 20 Python
基于Python 中函数的 收集参数 机制
Dec 21 Python
使用python 的matplotlib 画轨道实例
Jan 19 Python
new_zeros() pytorch版本的转换方式
Feb 18 Python
python神经网络编程实现手写数字识别
May 27 Python
python 实现非极大值抑制算法(Non-maximum suppression, NMS)
Oct 15 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文件夹的创建与删除方法
2015/01/24 PHP
php之static静态属性与静态方法实例分析
2015/07/30 PHP
php socket通信简单实现
2016/11/18 PHP
PHP实现一个多功能购物网站的案例
2017/09/13 PHP
asp.net HttpHandler实现图片防盗链
2009/11/09 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(一)让静态人物动起来
2013/01/23 Javascript
jqGrid随窗口大小变化自适应大小的示例代码
2013/12/28 Javascript
使用POST方式弹出窗口的两种方法示例介绍
2014/01/29 Javascript
JavaScript字符串对象的concat方法实例(用于连接两个或多个字符串)
2014/10/16 Javascript
node.js中的fs.futimesSync方法使用说明
2014/12/17 Javascript
jQuery中$.ajax()和$.getJson()同步处理详解
2015/08/12 Javascript
javascript数组去重的六种方法汇总
2015/08/16 Javascript
JavaScript实现将数组数据添加到Select下拉框的方法
2015/08/21 Javascript
高性能JavaScript循环语句和条件语句
2016/01/20 Javascript
JavaScript弹出对话框的三种方式
2016/03/23 Javascript
jQuery.ajax 跨域请求webapi设置headers的解决方案
2016/08/08 Javascript
nodeJS(express4.x)+vue(vue-cli)构建前后端分离实例(带跨域)
2017/07/05 NodeJs
Vue+Element使用富文本编辑器的示例代码
2017/08/14 Javascript
vue2.x+webpack快速搭建前端项目框架详解
2017/11/30 Javascript
jQuery实现简单复制json对象和json对象集合操作示例
2018/07/09 jQuery
ES10 特性的完整指南小结
2019/03/04 Javascript
微信内置浏览器图片查看器的代码实例
2019/10/08 Javascript
使用p5.js临摹动态图片
2019/11/04 Javascript
[58:37]Serenity vs Fnatic 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
浅谈Python用QQ邮箱发送邮件时授权码的问题
2018/01/29 Python
30秒轻松实现TensorFlow物体检测
2018/03/14 Python
Python简单获取网卡名称及其IP地址的方法【基于psutil模块】
2018/05/24 Python
Python3.4学习笔记之 idle 清屏扩展插件用法分析
2019/03/01 Python
Python实现字典按key或者value进行排序操作示例【sorted】
2019/05/03 Python
pandas DataFrame行或列的删除方法的实现示例
2019/08/02 Python
Marlies Dekkers内衣荷兰官方网店:荷兰奢侈内衣品牌
2020/03/27 全球购物
Order by的几种用法
2013/06/16 面试题
大学生旷课检讨书
2014/01/22 职场文书
老公保证书范文
2014/04/29 职场文书
详解GaussDB for MySQL性能优化
2021/05/18 MySQL
PHP 时间处理类Carbon
2022/05/20 PHP