需求:在該目錄下有很多子目錄(如下圖,截圖了部分),現要從該目錄和所有子目錄下找到所有擴展名為.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
