python操作文件案例二则
前言
python 对于文件及文件夹的操作。
涉及到 遍历文件夹下所有文件 ,文件的读写和操作 等等。
代码一
作用:查找文件夹下(包括子文件夹)下所有文件的名字,找出 名字中含有中文或者空格的文件 ,并打印到TXT中。
背景:在Android环境下,有些图片或者文件资源 ,如果命名不规范,会引起崩溃,如果有中文的话,直接编译不过去,
所以我们需要找出它们,(可以直接在下面脚本中修改他们的名字)
代码如下:
#coding=utf-8 # win 和 mac #查找所有空格名字 或者 空格 # -*- coding: utf-8 -*- #想要去除的空格的话,可以使用 replace(" ","") #将该文件放到要查找的目录下就可以 RootDir = os.getcwd() 获取的当前路径 #取得当前路径,所有 直接双击,或者cmd 当前目录下再执行python脚本 #检查空格 和中文 import os,sys import os.path import re RootDir = os.getcwd() zhPattern = re.compile(u'[\u4e00-\u9fa5]+') def start(rootDir): for f in os.listdir(rootDir): sourceF = os.path.join(rootDir,f) if os.path.isfile(sourceF): a, b = os.path.splitext(f) #去除扩展名 checkName(a) if os.path.isdir(sourceF): checkName(f) start(sourceF) #文件数组 """ 注意这地方的编码格式。windows文件名字的编码格式为gbk """ def checkName(f): # ff = f.decode('gbk').encode('utf-8') ff = f.decode('utf-8') # mac版 #ff = f.decode('gbk') #windows match = zhPattern.search(ff) #匹配中文 if match: print (ff) Chinese.append(f) for i in f: if i.isspace(): #检查空格 print f name.append(f) #输出到txt def wirte(): f = open(RootDir+"/checkReslut.txt", "w+") f.write("space :\n") for i in range(0, len(name)): f.write(name[i] + "\n") f.write("\nChinese :\n") for i in range(0, len(Chinese)): f.write(Chinese[i] + "\n") f.close() if __name__=="__main__": name = [] Chinese = [] start(RootDir) wirte() #os.system("pause") # windows版本
代码二
作用:在文件中查找字符串 或者替换
背景:UI工程,图片资源重复,同样的,可能起了不同的名字,或者在不同模块都使用了,我们需要把他们放到一个公共的地方,可以找出来,修改。
#coding=utf-8 #在文件中查找字符串 #可以直接替换 #mac 版 #SearchNameArry 想要查找的文件 数组 # 1.手动写 # 2.对于想要查找的文件,可以放到一个文件夹下,然后程序直接读取文件名字 #扩展 #1.可以将结果写到TXT中 #2.直接替换 import string import os import struct import re import fileinput import fnmatch RootDir = os.getcwd() TargetType = '*.csd' #要查找的文件类型 '.'(所有文件) '*.txt'(所有的txt) 等等 SearchNameArry = {'ggsc_b_004_1.png','ggsc_b_004_2.png','ggsc_b_004_3.png'} def walkDir(directory, ext='*.*', topdown=True): fileArray = [] for root, dirs, files in os.walk(directory, topdown): for name in files: #print name if fnmatch.fnmatch(name, ext): fileArray.append(os.path.abspath(os.path.join(root, name))) return fileArray #查找 def searchStr(filename, strFrom): for line in fileinput.input(filename, inplace=False): # inplace 是不是替换(自己查查fileinput.input的作用) isFind = False if re.search(strFrom, line): print line isFind = True if isFind == True: print os.path.basename(filename) #print filename #print os.path.basename(filename) #替换 未测试 def replaceInFile(filename, strFrom, strTo): for line in fileinput.input(filename, inplace=False): if re.search(strFrom, line): line = line.replace(strFrom, strTo) print line def main(): for filename in walkDir(RootDir, TargetType): for img in SearchNameArry: searchStr(filename, img) if __name__ == '__main__': main()
有不对的地方,请大神指正。交流加QQ776274781.
转载注明出处。