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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM