原文链接:http://www.juzicode.com/python-tutorial-file-attribute-digest
1、文件大小、时间文件的大小,修改时间、访问时间、创建时间需要使用到os.stat()方法,该方法返回一个 os.stat_result 的实例,该实例的st_mtime、 st_atime、st_ctime等属性表示文件的修改时间、访问文件、创建时间等。
#juzicode.com / VX:桔子code
import time
import os
filename = 'lena.jpg'
fa = os.stat(filename)
print('type fa:',type(fa))
print('fa:',fa)
print('fa.st_mtime:',fa.st_mtime)
print('fa.st_atime:',fa.st_atime)
print('fa.st_ctime:',fa.st_ctime)
print('fa.st_size:',fa.st_size)
print('fa.st_file_attributes:',fa.st_file_attributes)
运行结果:
type fa:fa: os.stat_result(st_mode=33206, st_ino=844424930139442, st_dev=1254643550, st_nlink=1, st_uid=0, st_gid=0, st_size=91814, st_atime=1653837972, st_mtime=1519317512, st_ctime=1652548643) fa.st_mtime: 1519317512.0 fa.st_atime: 1653837972.0751934 fa.st_ctime: 1652548643.6513824 fa.st_size: 91814 fa.st_file_attributes: 32
上述mtime等数值表示从1970-1-1 0:0:0UTC开始的秒数,下面的方法可以进一步将其转换为可读格式:
ts = time.localtime(fa.st_mtime)
ts_str = time.strftime('fa.st_mtime:%Y-%m-%d,%H:%M:%S',ts)
print(ts_str)
ts = time.localtime(fa.st_atime)
ts_str = time.strftime('fa.st_atime:%Y-%m-%d,%H:%M:%S',ts)
print(ts_str)
ts = time.localtime(fa.st_ctime)
ts_str = time.strftime('fa.st_ctime:%Y-%m-%d,%H:%M:%S',ts)
print(ts_str)
运行结果:
fa.st_mtime:2018-02-23,00:38:32 fa.st_atime:2022-05-29,23:26:12 fa.st_ctime:2022-05-15,01:17:232、hash码计算
可以使用hashlib模块计算文件的hash码,hashlib中可以计算sha1,sha256,sha384,sha512等hash码。
使用的方法如下,这里以sha1为例,第一种方法用sha1()方法创建一个实例,在创建时传入要计算的数据,然后用hexdigest()或digest()返回其摘要值。
#juzicode.com / VX:桔子code
import hashlib
sha = hashlib.sha1(b'abcdefghijklmnopqrstuvwxyz')
print('type sha:',type(sha))
print('sha:',sha)
print('type hexdigest:',type(sha.hexdigest()))
print('sha:',sha.hexdigest())
print('type digest:',type(sha.digest()))
print('sha:',sha.digest())
运行结果:
type sha:sha: type hexdigest: sha: 32d10c7b8cf96570ca04ce37f2a19d84240d3a89 type digest: sha: b'2xd1x0c{x8cxf9epxcax04xce7xf2xa1x9dx84$r:x89'
第二种方法用sha1()方法创建一个实例,在创建时不需要传入要计算的数据,再使用update方法更新传入的数据,然后用hexdigest()或digest()返回其摘要值。
import hashlib
sha = hashlib.sha1()
sha.update(b'abcdefghijklmnopqrstuvwxyz')
print('sha:',sha.hexdigest())
print('sha:',sha.digest())
运行结果:
sha: 32d10c7b8cf96570ca04ce37f2a19d84240d3a89
sha: b'2xd1x0c{x8cxf9epxcax04xce7xf2xa1x9dx84$r:x89'
如果要计算的是文件的hash码,则将上面例子中的数据更换为从文件中获取的数据即可:
import hashlib
sha = hashlib.sha1()
with open('logo.png','rb') as pr:
sha.update(pr.read()) # 从文件中读取数据
print('sha:',sha.hexdigest())
print('sha:',sha.digest())
运行结果:
sha: 35137c7716fd8790bec01b27a3ea65b0c795d520 sha: b"5x13|wx16xfdx87x90xbexc0x1b'xa3xeaexb0xc7x95xd5 "
sha256、sha512、sha384、md5等其他几种文件摘要的例子:
#juzicode.com / VX:桔子code
import hashlib
with open('logo.png','rb') as pr:
data = pr.read()
sha = hashlib.sha1()
sha.update(data)
print('sha1:',sha.hexdigest())
print('sha1:',sha.digest())
sha = hashlib.sha256()
sha.update(data)
print('sha256:',sha.hexdigest())
print('sha256:',sha.digest())
sha = hashlib.sha384()
sha.update(data)
print('sha384:',sha.hexdigest())
print('sha384:',sha.digest())
sha = hashlib.sha512()
sha.update(data)
print('sha512:',sha.hexdigest())
print('sha512:',sha.digest())
sha = hashlib.md5()
sha.update(data)
print('md5:',sha.hexdigest())
print('md5:',sha.digest())
运行结果:
sha1: 35137c7716fd8790bec01b27a3ea65b0c795d520 sha1: b"5x13|wx16xfdx87x90xbexc0x1b'xa3xeaexb0xc7x95xd5 " sha256: 5eaf9ffa04324260feba2be8ed4e538df07da07c4bf20faee656208829293c82 sha256: b'^xafx9fxfax042B`xfexba+xe8xedNSx8dxf0}xa0|Kxf2x0fxaexe6V x88))3、crc32计算 crc32的计算需要使用到zlib模块的crc32()函数:
#juzicode.com / VX:桔子code import zlib with open('logo.png','rb') as pr: data = pr.read() value = zlib.crc32(data) print('crc32:',value)运行结果:
crc32: 3657216124



