微慑信息网

打印当前目录、文件

[0823]

1、打印当前目录、文件

def getBasePath():
	#打印当前目录
	print os.getcwd()
	#根据abspath打印当前目录,可修改参数为../  ./ .如同目录遍历
	print os.path.abspath('./')
	#打印当前文件绝对路径
	print sys.argv[0]
	#打印当前文件名
	print os.path.basename(sys.argv[0])
	print os.path.basename(__file__)
	print os.curdir

遍历获取指定目录下所有文件:

os.walk()

语法
os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]])参数:
top — 根目录下的每一个文件夹(包含它自己), 产生3-元组 (dirpath, dirnames, filenames)【文件夹路径, 文件夹名字, 文件名】。

topdown –可选,为True或者没有指定, 一个目录的的3-元组将比它的任何子文件夹的3-元组先产生 (目录自上而下)。 如果topdown为 False, 一个目录的3-元组将比它的任何子文件夹的3-元组后产生 (目录自下而上)。

onerror — 可选,是一个函数; 它调用时有一个参数, 一个OSError实例。报告这错误后,继续walk,或者抛出exception终止walk。

followlinks — 设置为 true,则通过软链接访问目录。

	for root,dirs,files in  os.walk("F://test") :
		print root,dirs,files

如果目录包含中文,则os.walk(path.encode(“gbk”))

延伸:

获取目录下所有文件名(去重):

def getloop(mpath):
	allfile=[]
	for root,dirs,files in  os.walk(mpath) :
		#print root,dirs,files
		if len(files)==0:
			pass
		else:
			#print files
			for file in files:
				allfile.append(file)
	return allfile

def main():
	mpath="F://test"
	print getloop(mpath)
	print set(getloop(mpath))

 

获取文件MD5值,进行重复文件检查

(1)普通小体积文件

#coding:utf-8
import os
import sys
import hashlib
reload(sys)
sys.setdefaultencoding("utf-8")

def getFileMd5(mfile):
	with open(mfile,"rb") as f:
		data=f.read()
	file_md5=hashlib.md5(data).hexdigest()
	return file_md5
def getloop(mpath):
	allfile=[]
	for root,dirs,files in  os.walk(mpath) :
		if len(files)==0:
			pass
		else:
			for file in files:
				allfile.append(root+"//"+file)
	return allfile

def main():
	mpath="F:\\test"
	print getloop(mpath)	
	for i in (getloop(mpath)):
		print i,getFileMd5(i)
if __name__ == '__main__':
	main()

(2)大文件:

小文件使用f.read(),当文件体积多大该过程无比漫长,此路不通;

解决方案:

将文件拆分为8192字节的块(或128字节的其他倍数),然后使用 update()。

这利用了MD5具有128字节摘要块(8192为128×64)这一事实。由于您没有将整个文件读入内存,因此不会占用超过8192字节的内存。

—-参考:https://www.it1352.com/1612548.html

#coding:utf8
import jieba
import os
import hashlib
import sys
reload(sys)
sys.setdefaultencoding("utf-8")


def getloop(mpath):
	allfile=[]
	for root,dirs,files in  os.walk(mpath) :
		if len(files)==0:
			pass
		else:
			for file in files:
				allfile.append(root+"//"+file)
	return allfile

def getBigFileMd5(path):
    fp = open(path)
    checksum = hashlib.md5()
    while True:
        buffer = fp.read(8192)
        if not buffer:
        	break
        checksum.update(buffer)
    fp.close()    
    checksum = checksum.hexdigest()
    return checksum
def main():
	mpath="F:\\OS\\KALI2016"
	print getloop(mpath)
	for i in (getloop(mpath)):
		print i,getBigFileMd5(i)
	
if __name__ == '__main__':
	main()

PS:

Hash_1.0.4.exe以及使用win自带

certutil -hashfile “D:\*.*” MD5

对于大文件都会处理很慢

 

 

 

 

OVER

 

 

 

 

 

赞(0) 打赏
转载请附本站链接,未经允许不得转载,,谢谢:微慑信息网-VulSee.com » 打印当前目录、文件

评论 抢沙发

微慑信息网 专注工匠精神

微慑信息网-VulSee.com-关注前沿安全态势,聚合网络安全漏洞信息,分享安全文档案例

访问我们联系我们

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续提供更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏

登录

找回密码

注册