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 = urFUNC_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"" #正则表达式

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

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

  

Python —— 批量替换指定目录下的所有文件中指定字符串,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。