判断文件类型在开发中非常常见的需求,怎样才能准确的判断文件类型呢?首先大家想到的是文件的后缀,但是非常遗憾的是这种方法是非常不靠谱的,因为文件的后缀是可以随意更改的,而大家都知道后缀在linux系统下是没有这个概念的,所以仅靠判断后缀无法准确判断一个文件的类型。还有第二种方法是判断文件的头,每种文件在文件的头中会标识这种文件的类型,下面我们来看看如何用python来判断文件的类型。

python通过文件头判断文件类型的方法:#! /usr/bin/python

# pythontab提醒您注意中文编码问题,指定编码为utf-8

# -*- coding: utf-8 -*-

import struct

# 支持文件类型

# 用16进制字符串的目的是可以知道文件头是多少字节

# 各种文件头的长度不一样,少则2字符,长则8字符

def typeList():

return {

"FFD8FF": "JPEG",

"89504E47": "PNG"}

# 字节码转16进制字符串

def bytes2hex(bytes):

num = len(bytes)

hexstr = u""

for i in range(num):

t = u"%x" % bytes[i]

if len(t) % 2:

hexstr += u"0"

hexstr += t

return hexstr.upper()

# 获取文件类型

def filetype(filename):

binfile = open(filename, 'rb') # 必需二制字读取

tl = typeList()

ftype = 'unknown'

for hcode in tl.keys():

numOfBytes = len(hcode) / 2 # 需要读多少字节

binfile.seek(0) # 每次读取都要回到文件头,不然会一直往后读取

hbytes = struct.unpack_from("B"*numOfBytes, binfile.read(numOfBytes)) # 一个 "B"表示一个字节

f_hcode = bytes2hex(hbytes)

if f_hcode == hcode:

ftype = tl[hcode]

break

binfile.close()

return ftype

if __name__ == '__main__':

print filetype('./test.jpg')

常见文件格式的文件头文件格式 文件头(十六进制)

JPEG (jpg) FFD8FF

PNG (png) 89504E47

GIF (gif) 47494638

TIFF (tif) 49492A00

Windows Bitmap (bmp) 424D

CAD (dwg) 41433130

Adobe Photoshop (psd) 38425053

Rich Text Format (rtf) 7B5C727466

XML (xml) 3C3F786D6C

HTML (html) 68746D6C3E

Email [thorough only] (eml) 44656C69766572792D646174653A

Outlook Express (dbx) CFAD12FEC5FD746F

Outlook (pst) 2142444E

MS Word/Excel (xls.or.doc) D0CF11E0

MS Access (mdb) 5374616E64617264204A

python中如何区分文件类型_python准确判断文件类型相关推荐

  1. python读取文件类型_python准确判断文件类型

    判断文件类型在开发中非常常见的需求,怎样才能准确的判断文件类型呢?首先大家想到的是文件的后缀,但是非常遗憾的是这种方法是非常不靠谱的,因为文件的后缀是可以随意更改的,而大家都知道后缀在linux系统下 ...

  2. python中表头格式错误导入_python读csv文件时指定行为表头或无表头的方法

    pd.read_csv()方法中header参数,默认为0,标签为0(即第1行)的行为表头.若设置为-1,则无表头.示例如下: (1)不设置header参数(默认)时: df1 = pd.read_c ...

  3. python中排序英文单词怎么写_Python实现对文件进行单词划分并去重排序操作示例...

    本文实例讲述了Python实现对文件进行单词划分并去重排序操作.,具体如下: 文件名:test1.txt 文件内容: But soft what light through yonder window ...

  4. python中msg是什么意思_python下载.msg文件的附件

    def get_attachments(file_name, path_name): """ 获取.msg文件内的附件 :param file_name: .msg文件路 ...

  5. [转载] python中for语句用法_详解Python中for循环的使用_python

    参考链接: 在Python中将else条件语句与for循环一起使用 这篇文章主要介绍了Python中for循环的使用,来自于IBM官方网站技术文档,需要的朋友可以参考下 for 循环 本系列前面 &q ...

  6. python中for语句用法_详解Python中for循环的使用_python

    这篇文章主要介绍了Python中for循环的使用,来自于IBM官方网站技术文档,需要的朋友可以参考下 for 循环 本系列前面 "探索 Python,第 5 部分:用 Python 编程&q ...

  7. python中shutil.copyfile的用法_Python shutil.copyfile()用法及代码示例

    Python中的Shutil模块提供了许多对文件和文件集合进行高级操作的功能.它属于Python的标准实用程序模块.此模块有助于自动执行文件和目录的复制和删除过程. shutil.copyfile() ...

  8. 在Python中,json.jumps无法直接转译datetime类型的值

    python中,json.jumps无法直接转译datetime类型的值. 最简便的方法可以通过下面这个: json.dumps(results, indent=4, sort_keys=True, ...

  9. python中异或怎么算_python 异或运算的前提_异或运算公式

    Python基础(10)–数字-Python-第七城市 609x288 - 73KB - JPEG Python基础(10)--数字_资讯_突袭网 609x288 - 33KB - JPEG pyth ...

最新文章

  1. 造成ORA-12560: TNS: 协议适配器错误的问题的原因有三个:
  2. adaboost mh matlab,Adaboost算法的前世今生
  3. net4.0 程序没反应_@Java程序员,精通Spring,你不得不知道的那些书
  4. 无头结点单链表的逆置_第1章第2节练习题11 就地逆置单链表
  5. 读取properties
  6. 服务器邮件权限的开放,企业邮件服务器收发邮件权限
  7. github初学者指南_GitHub初学者指南
  8. cubemx stm32 配置两个串口_用STM32CubeMX怎么配置串口的接收中断
  9. 【极乐净土mmd】动作+镜头数据下载
  10. Android应用开发详解
  11. 千万不要点开,Cjson入门快速使用看这篇就够了(CJSON入门操作以及问题讲解,CJSON对象删除出错)
  12. 判断字符串中哪个字符出现的次数最多?
  13. 如何盘活新零售5大线上线下交互模式?拥抱用户与收益增长
  14. python自省与反射
  15. 【计算机图形学】实验一 · 绘制金刚石图案
  16. 计算机中网络协议三要素,网络协议的三要素是什么?各有什么含义?
  17. pymol安装与分子对接前预处理蛋白质
  18. 布尔教育 高端php培训,最新布尔教育php最后一期学员(完整)
  19. win7 安装 wamp2.5版本的memcache+memcached
  20. 南京林业大学计算机专升本,专转本之南京林业大学

热门文章

  1. Ai 2020最新版下载地址 一键安装Windows
  2. Failed to download metadata for repo ‘docker-ce-stable‘: Cannot download repomd.xml
  3. Typora入门笔记
  4. ncl批量处理多个nc文件_【批处理】批量创建多个文件夹
  5. Python 中弱引用的神奇用法与原理探析
  6. iPhonexr安兔兔html5测试,iphoneXR安兔兔跑分测试结果: 排名第三
  7. 【Oracle】开窗函数、分组排序 row_number\partition by 详解
  8. 如何利用Ajax下载文件
  9. 哈佛大学开放课程:《公正:该如何做是好?》第6课
  10. 人在职场身不由己,请收敛自己的气