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"" #正則表達式

  本例中不加這個正則,不影響運行結果

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

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM