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.

转载注明出处。

posted @ 2016-08-12 14:11  骑着驴的王子  阅读(520)  评论(1编辑  收藏  举报