問題背景:
想要實(shí)現(xiàn)提取某個(gè)指定目錄下面的所有的文件的特定的內(nèi)容并且寫入到新的文件里面去。文件夾還嵌套有文件夾,要提取的文件內(nèi)容是json格式的。
解決辦法:
針對(duì)第一點(diǎn),首先腳本要實(shí)現(xiàn)判斷是一個(gè)文件夾還是文件,這個(gè)點(diǎn)可以使用os.path.isdir這個(gè)os庫(kù)的函數(shù)來實(shí)現(xiàn),識(shí)別出文件夾之后直接使用os.listdir這個(gè)函數(shù)即可返回一個(gè)由文件名和目錄名組成的列表,剩下的就是拼接出來一個(gè)絕對(duì)路徑,使用python讀出來,再寫入到以時(shí)間戳命名的文件里面去即可。
實(shí)現(xiàn)代碼:
# encoding:utf-8
# 功能:讀取傳入的目錄下所有的文件(包括該目錄下的所有子目錄)的絕對(duì)路徑,并以列表形式返回所有文件的絕對(duì)路徑,最后提取出想要的文件內(nèi)容
# 要求傳入的路徑參數(shù)最后不能有斜杠,目的是為了遞歸時(shí)格式統(tǒng)一
import os
import json
import datetime
def readDir(dirPath):
if dirPath[-1] == '/':
print("文件夾路徑末尾不能加/")
return
allFiles = []
if os.path.isdir(dirPath):
fileList = os.listdir(dirPath)
# print(fileList)
for f in fileList:
f = dirPath+'/'+f
if os.path.isdir(f):
subFiles = readDir(f)
allFiles = subFiles + allFiles #合并當(dāng)前目錄與子目錄的所有文件路徑
else:
allFiles.append(f)
return allFiles
else:
return 'Error,not a dir'
def readFile(filePath):
with open(filePath,'r') as f:
temp = json.loads(f.read())
payload = temp['payload']
# print(payload)
return payload
if __name__ == '__main__':
dirPath = 'C:/Users/root/Desktop/poc-framework/output/20190907_104445/webshell'
fileList = readDir(dirPath)
for f in fileList:
nowTime = datetime.datetime.now().strftime('%Y%m%d%H%M%S%f')
newName = nowTime + ".aspx"
fo = open(newName, "w")
fo.write(readFile(f))
fo.close()
print("all sucess!")