作为程序员,从第一次接触编程开始,就知道了文件的两大类别:文本文件和二进制文件。但是,如何定义和判别这两类文件,在我的知识体系里,却一直是模糊的。直觉上,用文本方式读写的文件一定是文本文件,用二进制方式读写的文件一定是二进制文件,然而,用 notepad++ 照样可以打开甚至编辑一个 .jpg 文件或者一个 .xls 文件。

事实上,不管是文本文件还是二进制文件,在物理存储上都是二进制的。二者之间的区别不是物理层面的,而是逻辑层面的。文本文件是基于字符编码的文件,常见的编码有 ASCII 编码,UTF 编码等等。二进制文件是基于值编码的文件,你可以根据具体应用,指定某个值是什么意思(可以看作是自定义编码)。

在很多文档处理的应用中,我们需要判别某个文件是文本文件还是二进制文件。如果单从文件的扩展名来判别,自然是最简单的,但结果未必是正确的。我们重点讨论通过文件内容来判别。

适用于 py2 的方法:

import stringdef isText(content):"""判断文件是文本还是二进制"""if "\0" in content:return Falsetext_characters = ''.join(map(chr, range(32, 127)) + list("\n\r\t\b"))_null_trans = string.maketrans("", "")t = content.translate(_null_trans, text_characters)if float(len(t))/float(len(content)) > 0.30:return Falseelse:return True

适用于 py3 的方法:

def isText(content):"""判断文件是文本还是二进制"""if b'\0' in content:return Falsetext_characters = ''.join(list(map(chr, range(32, 127))) + list('\n\r\t\b'))_null_trans = b'\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff't = content.translate(_null_trans, text_characters.encode())if float(len(t))/float(len(content)) > 0.30:return Falseelse:return True

文本文件和二进制文件的判别相关推荐

  1. c语言实现指定路径文件读取_C语言实现文件复制功能(包括文本文件和二进制文件)...

    文件的复制是常用的功能,要求写一段代码,让用户输入要复制的文件以及新建的文件,然后对文件进行复制.能够复制的文件包括文本文件和二进制文件,你可以复制1G的电影,也可以复制1Byte的txt文档.实现文 ...

  2. 文本文件与二进制文件,C++流(待续)

    首先,让我们来回顾下你通常认为不值得一提的ASCII码表 ASCII码一般分为三个部分: Non printable, system codes between 0 and 31. Lower ASC ...

  3. 计算机中,文本文件和二进制文件的区别

    文本文件和二进制文件都是存储的二进制0和1,区别在于: 文本文件:二进制是以字符编码方式存储的,如utf-8, gbk,规则简单 二进制文件:二进制没有以字符编码的方式存储,规则复杂,只有计算机能够理 ...

  4. 文本文件与二进制文件及编码关系

    文本文件与二进制文件及编码关系(讲了一些基本的概念,但还并不是特别清晰明了,有一些小demo就好了)

  5. 【转】文本文件和二进制文件区别及java中字节流和字符流归纳

    首先在物理上文本文件和二进制文件并没有区别,都是以二进制01的形式存放于存储介质中,他们的区别只是逻辑上的区别,这两种方式只是在编码层次上有差别.文本文件是基于字符编码的文件,常见的编码有ASCII编 ...

  6. 文本文件和二进制文件的区别

    广义的二进制文件即指文件,由文件在外部设备的存放形式为二进制而得名.狭义的二进制文件即除文本文件以外的文件.文本文件是一种由很多行字符构成的计算机文件.文本文件存在于计算机系统中,通常在文本文件最后一 ...

  7. 文本文件与二进制文件

    文本文件与二进制文件 一.文本文件与二进制文件的定义     大家都知道计算机的存储在物理上是二进制的,所以文本文件与二进制文件的区别并不是物理上的,而是逻辑上的.这两者只是在编码层次上有差异.    ...

  8. 高级语言程序设计II 实验报告三c++使用文本文件和二进制文件的读写比较两者的区别和优劣...

    高级语言程序设计II 实验报告三 姓名:许恺 学号:2014011329 日期:2015年5月25日 1. 实验目的 通过在c++中使用文本文件和二进制文件的读写比较两者的区别和优劣,同时锻炼c++的 ...

  9. 计算机史话 —— 回车和换行 与 文本文件和二进制文件

    回车:carriage return 换行:line feed 在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打 10 个字符.但是它有一个问题, ...

  10. 文本文件和二进制文件的区别和联系

    目录 文件类型 ASCII码 文本文件和二进制文件 程序       最近使用MATLAB将文本文件转换为二进制文件时遇到了一些麻烦,回头补了补当年学的文件存储,对计算机中文件存储理解更深刻了,在这里 ...

最新文章

  1. MegEngine推理性能优化
  2. UNIX/LINUX程序设计教程(1)-- 获取系统信息
  3. 计算机二级python用什么书-计算机二级Python考试有什么学习资料?
  4. RabbitMQ—队列迁移插件shovel的使用
  5. 画瀑布图_常见的招财风水画之含义
  6. 支撑性服务 自动化能力
  7. 如何开启并配置CITRIX Xenserver的SNMP服务
  8. 岳阳学计算机软件,岳阳学java专业学校排名
  9. restfull服务器端获取文件,使用 FileREST API (获取文件服务) - Azure 文件存储 | Microsoft Docs...
  10. 网站icon收藏夹图标
  11. 腾达无线加密与Win7
  12. idea为什么不显示运行按钮_idea 右键项目没有run 运行选项
  13. android 短信 易用性总结,详解短信验证和邮件验证的区别
  14. 从零开始之驱动发开、linux驱动(二十五、framebuffer 子系统框架)
  15. css3布局的若干笔记总结
  16. 5G时代来临,前端开发工程师必须了解的音视频入门基础知识
  17. 大数据分析(一)——虚拟机环境配置
  18. WordPress导航主题源码 webstack pro V2.0406主题
  19. 港联证券|券商再迎利好!这一比例大幅下调,释放300亿资金
  20. python 拼音 英文识别_python识别一段由字母组成的字符串是否是拼音

热门文章

  1. VB.NET 基础入门
  2. linux-文件系统格式区别xfs、ext4、ext3、ext2、vfat、swap、EFI system partition
  3. DatagramPacket.getData()与DatagramPacket.getLength()的误区
  4. 生成M3U8播放地址用于手机HLS Player(M3U8Player)观看电视频道直播方案
  5. 2022年计算机二级Java语言程序设计复习题及答案
  6. 绘图软件Origin新手使用教程
  7. OpenDDS 安全配置
  8. cxonev4验证用户_欧姆龙编程组态软件Omron CX-ONE V4.50 简体中文版
  9. WPS如何对文档加密,忘记密码又如何解密?
  10. 2008评估过期 server sql_sql server 2008 评估期过期处理