参考: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