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 29 Python
python实现的各种排序算法代码
Mar 04 Python
Python3解决棋盘覆盖问题的方法示例
Dec 07 Python
答题辅助python代码实现
Jan 16 Python
使用Python写一个小游戏
Apr 02 Python
Python3随机漫步生成数据并绘制
Aug 27 Python
python+pyqt5实现24点小游戏
Jan 24 Python
解决django-xadmin列表页filter关联对象搜索问题
Nov 15 Python
Django app配置多个数据库代码实例
Dec 17 Python
tensorflow之并行读入数据详解
Feb 05 Python
详解Python中的编码问题(encoding与decode、str与bytes)
Sep 30 Python
pycharm 使用tab跳出正在编辑的括号(){}{}等问题
Feb 26 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垃圾回收机制简单说明
2010/07/22 PHP
php expects parameter 1 to be resource, array given 错误
2011/03/23 PHP
php 无法加载mysql的module的时候的配置的解决方案引发的思考
2012/01/27 PHP
PHP逐行输出(ob_flush与flush的组合)
2012/02/04 PHP
php eval函数用法 PHP中eval()函数小技巧
2012/10/31 PHP
盘点PHP和ASP.NET的10大对比!
2015/12/24 PHP
Ajax实现对静态页面的文章访问统计功能示例
2016/10/10 PHP
JAVASCRIPT 对象的创建与使用
2021/03/09 Javascript
javascript静态的url如何传递
2007/05/03 Javascript
浅谈javascript 归并方法
2015/01/21 Javascript
JQuery ztree 异步加载实例讲解
2016/02/25 Javascript
详解使用webpack构建多页面应用
2017/12/21 Javascript
微信小程序使用setData修改数组中单个对象的方法分析
2018/12/30 Javascript
微信小程序实现商品属性联动选择
2019/02/15 Javascript
vuex actions异步修改状态的实例详解
2019/11/06 Javascript
javascript跳转与返回和刷新页面的实例代码
2019/11/20 Javascript
基于Vue2实现移动端图片上传、压缩、拖拽排序、拖拽删除功能
2021/01/05 Vue.js
vue keep-alive的简单总结
2021/01/25 Vue.js
Python实现国外赌场热门游戏Craps(双骰子)
2015/03/31 Python
python学习入门细节知识点
2018/03/29 Python
python制作mysql数据迁移脚本
2019/01/01 Python
Python设计模式之职责链模式原理与用法实例分析
2019/01/11 Python
浅谈python中get pass用法
2019/03/19 Python
Python 使用folium绘制leaflet地图的实现方法
2019/07/05 Python
Python Django框架url反向解析实现动态生成对应的url链接示例
2019/10/18 Python
解决keras加入lambda层时shape的问题
2020/06/11 Python
python算的上脚本语言吗
2020/06/22 Python
为什么要使用servlet
2016/01/17 面试题
网络维护中文求职信
2014/01/03 职场文书
一份教室追逐打闹的检讨书
2014/09/27 职场文书
发展党员工作情况汇报
2014/10/28 职场文书
2014年结对帮扶工作总结
2014/12/17 职场文书
劳模先进事迹材料
2014/12/24 职场文书
安全学习心得体会范文
2016/01/18 职场文书
党风廉政建设心得体会(2016最新版)
2016/01/22 职场文书
使用python+pygame开发消消乐游戏附完整源码
2021/06/10 Python