原文链接: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: <class 'os.stat_result'>
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:23

2、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: <class '_hashlib.HASH'>
sha: <sha1 HASH object @ 0x000002A28EEA79B0>
type hexdigest: <class 'str'>
sha: 32d10c7b8cf96570ca04ce37f2a19d84240d3a89
type digest: <class 'bytes'>
sha: b'2\xd1\x0c{\x8c\xf9ep\xca\x04\xce7\xf2\xa1\x9d\x84$\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'2\xd1\x0c{\x8c\xf9ep\xca\x04\xce7\xf2\xa1\x9d\x84$\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"5\x13|w\x16\xfd\x87\x90\xbe\xc0\x1b'\xa3\xeae\xb0\xc7\x95\xd5 "

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"5\x13|w\x16\xfd\x87\x90\xbe\xc0\x1b'\xa3\xeae\xb0\xc7\x95\xd5 "
sha256: 5eaf9ffa04324260feba2be8ed4e538df07da07c4bf20faee656208829293c82
sha256: b'^\xaf\x9f\xfa\x042B`\xfe\xba+\xe8\xedNS\x8d\xf0}\xa0|K\xf2\x0f\xae\xe6V \x88))<\x82'
sha384: f52fbc4363bbf82255e3126d9e69a51692d8491a8bf3dfb85b4fb8357417499887e669d78f0888aafc9a2a7ad06ae763
sha384: b'\xf5/\xbcCc\xbb\xf8"U\xe3\x12m\x9ei\xa5\x16\x92\xd8I\x1a\x8b\xf3\xdf\xb8[O\xb85t\x17I\x98\x87\xe6i\xd7\x8f\x08\x88\xaa\xfc\x9a*z\xd0j\xe7c'
sha512: 3b204476201e02dff59602d346ab774bf5369e06a415fdbbb6dd6dd670547ade0c4aba3f1295713c42d3f847388b5fdc6aabe572b9991f01821a0cdc28ad2e1e
sha512: b'; Dv \x1e\x02\xdf\xf5\x96\x02\xd3F\xabwK\xf56\x9e\x06\xa4\x15\xfd\xbb\xb6\xddm\xd6pTz\xde\x0cJ\xba?\x12\x95q<B\xd3\xf8G8\x8b_\xdcj\xab\xe5r\xb9\x99\x1f\x01\x82\x1a\x0c\xdc(\xad.\x1e'
md5: ec14c325d9e70ceada9b6e67d894ccd7
md5: b'\xec\x14\xc3%\xd9\xe7\x0c\xea\xda\x9bng\xd8\x94\xcc\xd7'

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)

运行结果:

<class 'int'>
crc32: 3657216124

Python文件属性、文件摘要相关推荐

  1. python对文件的读操作方法有哪些-python--文件的读写操作

    Python提供了必要的函数和方法进行默认情况下的文件基本操作 文件打开方式: open(name[,mode[buf]]) name:文件路径 mode:打开方式 buf:缓冲buffering大小 ...

  2. python下载大文件-python 大文件

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 大文件上传服务一.前端(http:fex.baidu.comwebuploade ...

  3. python将字符串s和换行符写入文件fp_【python】文件操作

    本文内容包括: 文件的读写操作 文件的各种系统操作 存储对象 遍历文件 上代码: import os import os.path rootdir = "d:/code/su/data&qu ...

  4. ASP.NET -- WebForm -- Cookie的使用 应用程序权限设计 权限设计文章汇总 asp.net后台管理系统-登陆模块-是否自动登陆 C# 读写文件摘要...

    ASP.NET -- WebForm -- Cookie的使用 ASP.NET -- WebForm --  Cookie的使用 Cookie是存在浏览器内存或磁盘上. 1. Test3.aspx文件 ...

  5. python2读文件,python之文件的读写(2)

    小R昨天因为在研究weblogic的漏洞就没来得及学习python(好吧,这都是借口,懒了,大家可不能像我这样.要坚持每天都学).   这个进度是有点慢呀.哎呀,没事没事,我还年轻,才20岁.  哈哈 ...

  6. Python对文件的创建和读写操作

    Python对文件的创建和读写操作 Python提供了文件读写的方法,并且提供了内置的CSV模块,可以对文本文件和二进制文件方便的进行读写操作.除此之外,Python还提供了os模块和shutil模块 ...

  7. python判断文件或文件夹是否存在、创建文件夹

    python判断文件或文件夹是否存在.创建文件夹 1.判断文件或文件夹是否存在 import os #返回值是个布尔类型的 os.path.exists("G:/软件/文件测试/test.p ...

  8. python删除文件某行_python 文件操作删除某行的实例

    python 文件操作删除某行的实例 使用continue跳过本次写循环就可以了 #文本内容 Yesterday when I was young 昨日当我年少轻狂 The tasting of li ...

  9. Python错误总结:Python读取文件报错

    在使用Python读取文件时报错:OSError: [Errno 22] Invalid argument: '\u202aC:\Users\XCB666\Desktop\副本.xlsx' 具体代码如 ...

  10. 【转】python改文件夹名称大全_python文件和目录操作方法大全(含更改文件夹下所有文件名称的实例)

    原文:​​​​​​ ​​​​​​​​​​​​​​​​​​​python改文件夹名称大全_python文件和目录操作方法大全(含更改文件夹下所有文件名称的实例)..._心失荒野的博客-CSDN博客 一. ...

最新文章

  1. python与mongo_MongoDB与Python的交互
  2. ubuntu 14.04安装mysql server mysql client
  3. 面试后总是没有结果的7大原因
  4. 从运维域看 Serverless 真的就是万能银弹吗?
  5. 如何增加儿童产品中的趣味性?
  6. Android 顶部滑动切换实现(一)
  7. nginx mysql双机热备_MYSQL双机热备
  8. C语言去除字符串空格
  9. maven spring 使用memcached方法
  10. 大数据时代,海量数据处理常用思路和方法总结
  11. Kaggle | IEEE Fraud Detection(EDA)
  12. Python统计学11——分位数回归
  13. Pandas实战-Series的方法
  14. 【训练题36:数学】斐波那契各项幂次前缀和 | ZOJ 3774
  15. 一个女留学生在美国的七年
  16. boost log使用
  17. 两层板如何做阻抗控制呢
  18. MBA-day17 假言推理:如果的考法与题型
  19. 怎么在电脑中更新statsmodels.stats. diagnostic
  20. 华为ensp NAT技术地址转换

热门文章

  1. CopyBeanUtils坑,xxDto cannot be cast to xxxEntity 类型转化错误
  2. HTML 动画(一)
  3. Allavsoft 下载 .m3u8 视频
  4. 常见电子元器件检测方法。——Arvin
  5. 自我提升之二 揭秘IOC注入框架,轻松实现布局、属性、事件注入
  6. KITTI数据集解读
  7. 麦子学院cocos2d听课截图
  8. 电力IEC61850的基础知识和使用
  9. 阿里 P6 和 P7 的主要区别是什么?
  10. Java函数式编程(一)–Function的使用