• Python os模块实例之遍历目录及子目录指定扩展名的文件


    需求:在该目录下有很多子目录(如下图,截图了部分),现要从该目录和所有子目录下找到所有扩展名为.meta的文件,并获取文件中第二行guid的值(': '后面的),然后将所有guid的值输出到另一文件中

    .meta文件截图:

    思路:

    遍历当前目录的子目录,如果是文件并且扩展名为.meta,获取guid,写入到guid.txt;如果是子目录,则遍历子目录下的文件。

     方法一:

    #!usr/bin/env python
    # -*- coding: utf-8 -*-
    
    import os
    
    outfile = open('guid.txt', 'a')                         # 以追加方式打开输出文件
    for dir in os.listdir('.'):                             # 遍历当前目录所有问价和目录
        child = os.path.join('.', dir)                      # 加上路径,否则找不到
        if os.path.isdir(child):                            # 如果是目录,则继续遍历子目录的文件
            for file in os.listdir(child):                    
                if os.path.splitext(file)[1] == '.meta':    # 分割文件名和文件扩展名,并且扩展名为'meta'        
                    file = os.path.join(child, file)        # 同样要加上路径
                    f = open(file, 'r')
                    guid = f.readlines()[1].split(': ')[1]  # 获取文件第二行以': '分割的后者
                    outfile.write(guid)                     # 写入输出文件
                    f.close()                        
        elif os.path.isfile(child):                         # 如果是文件,则直接判断扩展名
            if os.path.splitext(child)[1] == '.meta':
                f = open(child, 'r')
                guid = f.readlines()[1].split(': ')[1]
                outfile.write(guid)
                f.close()
    outfile.close()

    方法二:上面的方法只能遍历两级目录,如果要遍历三级目录,必须还要加一个for循环。那么可以用到os.walk()方法一次性遍历当前目录和所有子目录的文件和目录。

    #!usr/bin/env python
    # -*- coding: utf-8 -*-
    
    import os
    
    outfile = open('guid.txt', 'a')                          # 以追加方式打开输出文件
    for dirpath, dirs, files in os.walk('.'):                # 递归遍历当前目录和所有子目录的文件和目录
        for name in files:                                   # files保存的是所有的文件名
            if os.path.splitext(name)[1] == '.meta':        
                filename = os.path.join(dirpath, name)       # 加上路径,dirpath是遍历时文件对应的路径
                f = open(filename, 'r')
                guid = f.readlines()[1].split(': ')[1]       # 获取文件第二行以': '分割的后者
                outfile.write(guid)                          # 写入输出文件
                f.close()    
    outfile.close()

    在该目录下运行此程序,将会得到guid.txt。

    相关方法的作用和理解见:http://www.cnblogs.com/victorwu/p/5838430.html

  • 相关阅读:
    从string类的实现看C++类的四大函数 [写的很好]
    毕业5年决定你的命运
    git push 原因以及问题!
    poj 1195 Mobile phones 夜
    poj 2886 Who Gets the Most Candies 夜
    poj Asimple Problem With Integers 夜
    poj 2750 Potted Flower 夜
    poj 2528 Mayor's posters 夜
    poj 2777 Count Color 夜
    poj 2482 Stars in Your Window 夜
  • 原文地址:https://www.cnblogs.com/victorwu/p/5840099.html
Copyright © 2020-2023  润新知