參考: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()
作用:
批量將指定目錄下的所有文件中的$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