问题背景:
想要实现提取某个指定目录下面的所有的文件的特定的内容并且写入到新的文件里面去。文件夹还嵌套有文件夹,要提取的文件内容是json格式的。
解决办法:
针对第一点,首先脚本要实现判断是一个文件夹还是文件,这个点可以使用os.path.isdir
这个os库的函数来实现,识别出文件夹之后直接使用os.listdir
这个函数即可返回一个由文件名和目录名组成的列表,剩下的就是拼接出来一个绝对路径,使用python读出来,再写入到以时间戳命名的文件里面去即可。
实现代码:
# encoding:utf-8
# 功能:读取传入的目录下所有的文件(包括该目录下的所有子目录)的绝对路径,并以列表形式返回所有文件的绝对路径,最后提取出想要的文件内容
# 要求传入的路径参数最后不能有斜杠,目的是为了递归时格式统一
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 #合并当前目录与子目录的所有文件路径
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!")
网友评论