我尝试创建一个脚本,根据常见文件类型检查 Downloads 目录中的所有文件,然后告诉我该目录中有多少文件不是GIF或JPG文件。我熟悉基本的Python,但这是我第一次尝试这样的事情而且我正在寻找一些帮助或指向正确的方向?
file_sigs = {'\xFF\xD8\xFF':('JPEG','jpg'), '\x47\x49\x46':('GIF','gif')}
def readFile():
filename = r'c:/temp/downloads'
fh = open(filename, 'r')
file_sig = fh.read(3)
print '[*] check_sig() File:',filename #, 'Hash Sig:',
binascii.hexlify(file_sig)
答案 0 :(得分:2)
另一种选择,使用 imghdr 库来查看文件的标题(它将为你处理标题检查),就像这样(相应地调整你的根路径):< / p>
#!/usr/bin/env python
import os
from os.path import join
import imghdr
stats = {'imgs': 0, 'nonimgs': 0}
for dirpath, dirnames, filenames in os.walk('/home/user/Downloads'):
for name in filenames:
fullPath = os.path.join(dirpath, name)
fileType = imghdr.what(fullPath)
if fileType in ('gif', 'jpeg'):
stats['imgs'] += 1
else:
stats['nonimgs'] += 1
print "File: {0}, type: {1}".format(fullPath, fileType)
print "non images: {0}".format(stats['nonimgs'])
print "images: {0}".format(stats['imgs'])
有关详细信息,请参阅imghdr doc。
答案 1 :(得分:0)
您可以使用listdir
查找所有文件,使用Counter
计算每种文件类型的总数,并传入您要从文件总数中减去的任何扩展名
import os,os.path
from collections import Counter
def find_files(pth,*args):
c = Counter((os.path.splitext(name)[1][1:] for name in os.listdir(pth) if os.path.isfile(name)))
total = sum(c.values())
spec_tot = sum(c.get(arg,0) for arg in args)
return total - spec_tot
print(find_files(r'c:/temp/downloads' ,'JPEG','jpg','GIF','gif'))
你的反击词典看起来像Counter({'txt': 9, 'py': 3, 'pyc': 3, 'json': 1, 'py~': 1})
。
total = sum(c.values())
获取文件总数。
spec_tot = sum(c.get(arg,0) for arg in args)
获取您传入的每个文件扩展名的总计为*args
。
return total - spec_tot
将为您提供所有文件,减去您要忽略的扩展程序。