Python学习笔记015——文件file的常规操作(二进制文件)
有时候诸如图片、音乐等信息不是以文本的形式存储的,而是二进制文件格式存储的。
有时候很多信息不是以文本文件的形式存储的
很多时候,都需要用到二进制读取文件。毕竟很多信息不是以文本的形式存储。例如:图片,音乐等等。这些东西都是有规则的二进制文件。
1 字节(byte)的单位
1KB = 2*10 Bytes
1MB = 1KB * 1024 = 2**20 Bytes
1GB = 1KB * 1K * 1K = 2**30 Bytes
# 1byte = 8bit(位)
2 二进制文件
二进制文件是以字节(byte) 为单位存储的,
不以换行符(\n)为单位进行区分内容的文件读写方法
二进制是以字节来操作的
文本是以字符来操作的
3 打开模式mode
’ b ‘
注意:"b"(用二进制模式打开)"t"(文本文件模式打开,默认,也即缺省模式)这两个不能同时使用
4 字节串 bytes
字节串也称之为字节序列
存储时以字节为单位的数据
字节串时不可变的字节序列
(如果不好理解,可以参考元组)
字节串一旦创建,不可修改,与元组类似
备注:
字节是0~255(2**8-1)之间的整数(0b11111111, 0b00000000)
字符串存的数是1~65535(2**16-1)之间的数(UNICODE16/UNICODE32)
字节串创建过程中不能有汉字(编码范围限制所致),但可用"utf-8"来实现将字符串转成字节串
5 创建字节串
在非特殊情况下,在创建字符串时,单引号和双引号具有相同的作用
5.1 创建空字节串
创建空字符串有两种方式
方式1:
>>> b = b"" >>> b b'' >>> B = B"" >>> B b''
方式2:
>>> D = bytes() >>> D b''
5.2 创建非空字节串
>>> a = b"ABCD" >>> b = b"ABCD" >>> c = b'''ABCD''' >>> d = b'\x41\x42' >>> a b'ABCD' >>> b b'ABCD' >>> c b'ABCD' >>> d b'AB'
6 字节串的构造(创建)函数 bytes
bytes() :创建一个空字节串, 等同于b''
bytes(整型可迭代对象) : 用可迭代对象初始化一个字节串(数值必须是0~255的整数)
bytes(整数n) : 生成n个值为0的字节串
bytes(字符串, encoding='utf-8') :用字符串转换编码生成一个字节串
示例
>>> b = bytes(range(0x41,0x41+26)) >>> b b'ABCDEFGHIJKLMNOPQRSTUVWXYZ' >>> c = bytes(4) >>> c b'\x00\x00\x00\x00' >>> e = bytes("python", 'ascii') >>> e b'python' >>> f = bytes("中文",'utf-8') >>> f b'\xe4\xb8\xad\xe6\x96\x87'
7 字节串的运算
+ += * *=
比较运算: < <= > >= == !=
in /not in 运算符
索引 index
切片 slice
8 二进制文件的写操作示例
示例1 (写入)
二进制操作必须时ASCII范围内的数值
f = open("binary_output.txt", 'wb') r = f.write(b"今天是2018年2月6日") print("已经写入", r, "个字节") f.close()
运行
File "binary_write.py", line 6 r = f.write(b"今天是2018年2月6日") ^ SyntaxError: bytes can only contain ASCII literal characters.
字节中只能包含ASCII范围内的字符
示例 2(写入)
将示例1中的汉字改成纯英文字母
f = open("binary_output.txt", 'wb') r = f.write(b"ABCDEF") print("已经写入", r, "个字节") f.close()
运行:
已经写入 6 个字节
f = open(file_name,"rb+") data = f.read(1) #这样data是一个b开头的ASCII数字。 f.close() print(ord(data)) #将二进制数据转化为10进制数据。
代码中的f 是文件流对象,是由顺序的,也称之为字节流
查看字节流的方式xxd file_name。
如查看test.txt文件的字节流,文件内容:ABCabc123
xxd test.py
输出
00000000: 4142 4361 6263 ABCabc
16进制表示的地址,可以认为是一个列表
00000000(16进制表示的地址): 0a23 20e6 8993 e5bc 80e6 9687 e4bb b6ef # 16字节
01 02
00000010: bc8c e8bf 94e5 9b9e e696 87e4 bbb6 e6b5 ................
一次读写都是8个位,也即一个字节
可以用 cat test.txt 方式直接查看 test.txt 文件内容
ls -l test.txt 查看文档的字节数
用count = f.write返回值写入字符数来判断磁盘满是否满
\n的换行是lunix unix系统的
微软的换行是\t\n
在读取或写入时一定要注意\n \t\n之间的差异
在其他平台中,微软的\t\n会被忽略,输出时正常
w+ 与w 效果一样
硬盘是块 4k为一块
r = f.write(b"aba")在执行程序时并没有将其写入文件中,而是将其存放在缓存中,等足够数量后才写入硬盘,
可以用f.flush来实现操作,这函数功能是倾倒缓存内容,不管缓存中的容量是否够存储条件,均将缓存中的内容写入硬盘中
Python学习笔记015——文件file的常规操作(二进制文件)的更多相关文章
- Python学习笔记015——文件file的常规操作之一(文本文件)
1 什么是文件 文件是用于数据存储的单位 文件通常用来长期保存数据 读写文件是最常见的I/O操作.Python内置了读写文件的函数,用法和C是兼容的. 读写文件的功能都是由操作系统提供的,一般而言,操 ...
- Python学习笔记015——文件file的常规操作之四(输入重定向)
windows命令提示符(cmd.exe)和Linux Shell(bash等)均可通过">"或”>>“将输出重定向.其中, ">"表示 ...
- Python学习笔记015——文件file的常规操作之三(标准输入输出文件)
1 标准输入输出文件 在Python中,模块sys中含有标准的输入输出文件 sys.stdin 标准输入方法(一般是键盘) sys.stdout 标准输出方法(到显示器的缓冲输出) sys ...
- Python学习笔记015——文件file的常规操作seek()及tell()
1 seek() 1.1 概述 file.seek()用于将文件游标移动到文件的任意位置,便于对文件的当前位置(增.删.改.查)操作 1.2 语法 fileObject.seek(offset[, w ...
- [Python学习笔记]组织文件
shutil 模块 shutil 模块可以让我们很方便的在Python程序中复制.移动.改名和删除文件. 复制文件和文件夹 使用shutil.copy()来复制文件,该函数含两个参数,均为字符串格式的 ...
- Python学习笔记之文件处理
1.打开和关闭 要打开文件可以使用函数 open(),它位于自动导入模块 io 中.函数将文件名作为唯一不可缺少的函数,并返回一个文件对象.它还有一个名叫 mode 的参数,用于指定文件模式,其可取值 ...
- python学习笔记(11):文件的访问与函数式编程
一.文本文件读写的三种方法 1.直接读入 file1 = open('E:/hello/hello.txt') file2 = open('output.txt','w') #w是可写的文件 whil ...
- python学习笔记(7)文件的访问与函数式编程
一.文件读写的3中方法 1.直接读入 fiel1=open('test.txt') file2=open('output.txt') while True: line=file1.readLine() ...
- Python学习笔记 - day5 - 文件操作
Python文件操作 读写文件是最常见的IO操作,在磁盘上读写文件的功能都是由操作系统提供的,操作系统不允许普通的程序直接操作磁盘(大部分程序都需要间接的通过操作系统来完成对硬件的操作),所以,读写文 ...
随机推荐
- QT学习:c++解析html相关
原来我做爬虫的时候,对页面进行解析的时候总是用很简单粗暴的方法,直接找规律.后来在网上看到了gumbo,尝试了一下,发现确实很好用,所以向大家推荐一下. 以下转自:http://blog.csdn.n ...
- 【Type】类型 ParameterizedType
Type 接口[重要] Type接口完整的定义: public interface java.lang.reflect.Type { /** * Returns a string describing ...
- 前端要给力之:URL应该有多长?
URL到底应该有多长?我为什么要提这个问题呢?有许多优化指南里都写着:要尽量减小COOKIE.缩短URL,以及尽可能地使用GET请求等等,以便优化WEB页面的请求和装载.但是,这种所谓“尽可能”.“尽 ...
- js实现手机页面定位
<script type="text/javascript"> function Location() {}; Location.prototype.getLocati ...
- [Webpack] Externalize Dependencies to be Loaded via CDN with webpack
We can separate our custom application code from the common libraries we leverage, such as React and ...
- 解决百度编辑器在编辑视频时src丢失的问题
问题描述:使用的是最新的UEditor 1.4.3.3版本,在上传完视频后,编辑的时候出现视频的src丢失的问题 解决方式:修改ueditor.config.js文件,将 img: ['src', ' ...
- Activiti Designer 5.14.1插件安装和使用
1.离线包下载 离线安装包下载:https://files.cnblogs.com/files/modou/Activiti_BPMN_2.0_designer.rar 2.安装 先把jars文件夹中 ...
- HDUOj Ignatius and the Princess III 题目1002
母函数 组合数学 #include<stdio.h> int c1[125]; int c2[125]; int main() { int n,i,j,k; while(scanf ...
- Eclipse 批量创建多级文件夹
Eclipse 批量创建多级文件夹 CreateTime--2018年3月8日08:23:24 Author:Marydon 1.选中要建立文件夹的父级目录-->右键-->New--& ...
- Centos6.5搭建dhcpd服务
dhcpd动态获取ip地址,对于小型局域网很便利的.在不大的网络社会静态ip也是不错的! 环境 centos6.5 10.10.24.1 (dns-server) winxp sp3 (clie ...