Python —— 批量替换指定目录下的所有文件中指定字符串

参考:http://blog.csdn.net/zcwfengbingdongguke/article/details/13951527

代码:

#!/usr/bin/python

import os

import re

#list files

def listFiles(dirPath):

    fileList=[]

    for root,dirs,files in os.walk(dirPath):

        for fileObj in files:

            fileList.append(os.path.join(root,fileObj))

    return fileList

def main():

    fileDir = "/home/hadoop/developer/csvpy/replstr"

    regex = ur'FUNC_SYS_ADD_ACCDETAIL'

    fileList = listFiles(fileDir)

    for fileObj in fileList:

        f = open(fileObj,'r+')

        all_the_lines=f.readlines()

        f.seek(0)

        f.truncate()

        for line in all_the_lines:

            f.write(line.replace('$HADOOP_HOME$','/home/ocetl/app/hadoop'))    

        f.close()  

if __name__=='__main__':

    main() 

ReplaceStrBatch

作用:

  批量将指定目录下的所有文件中的$HADOOP_HOME$替换成/home/ocetl/app/hadoop

知识点:

1. def listFiles(dirPath):

  定义函数

2. fileList=[]

  声明数组

3. for root,dirs,files in os.walk(dirPath):

  os.walk("")

    返回一个三元组,遍历的路径、当前遍历路径下的目录、当前遍历目录下的文件名

4. os.path.join(root,fileObj)

  directory = ["C", "pic", "18x.jpg"]
  os.path.join(*directory) #相当于os.path.join("C", "pic", "18x.jpg")

5. regex = ur'FUNC_SYS_ADD_ACCDETAIL'

  regex=ur"Python —— 批量替换指定目录下的所有文件中指定字符串" #正则表达式

  本例中不加这个正则,不影响运行结果

6. f = open(fileObj,'r+')

  r+:  可读可写,若文件不存在,报错
  w+: 可读可写,若文件不存在,创建

7. all_the_lines=f.readlines()

  .readlines()每次按行读取整个文件内容,将读取到的内容放到一个列表中,返回list类型

7. f.seek(0)

  seek()函数回到文件头部,因为迭代器已经访问完了文件的所有行

8. f.truncate()

  清空文件内容

  仅当以 "r+"   "rb+"    "w"   "wb" "wb+"等以可写模式打开的文件才可以执行该功能

9.  if __name__=='__main__':

  在if __name__ == "__main__":之后的语句作为模块被调用的时候,语句之后的代码不执行;

  直接使用的时候,语句之后的代码执行。通常,此语句用于模块测试中使用

    参考:http://keliang.blog.51cto.com/3359430/649318

  

上一篇:史林枫:C#.NET利用ffmpeg操作视频实战(格式转换,加水印 一步到位)


下一篇:查找目录下的所有文件中是否含有某个字符串 find .|xargs grep -ri "IBM"