python3   bytes 和 bytearrary

bytes

二进制文件的读写:

什么是二进制文件读:

文件中以字节(byte)为单位存储,不以换行符(\n)为单位分隔内容的文件;

  1. f = open('mytext.txt', 'w')
  2. f.write("你好中国")
  3. f.close()
  4.  
  5. $xxd mytest.txt
  6. e4db a0e5 a5bd b8ad e59b bd0a

二进制文件操作方法:

F.read( size = -1 )     从一个文件流中最多读出size个字符

F.write(字符串/字节串)    写一些数据到文件流中,返回写入的字节数(字符数)

F.tell()   返回当前文件流的绝对位置

F.seek( cookie,   whence=0)  改变数据流的位置,返回新的绝对位置

F.readable()           判断这个文件是否可读,可读则返回True

F.writable()            判断这个文件是否可写,可写则返回True

  1. f = open('mytext.txt', 'rb')
  2. b = f.read() # bytes 类型
  3. f.close()
  4. print(len(b)) #用len取值

F.read()   返回类型:

文本文件, 返回字符串

二进制文件,返回字节串(字节序列)

  1. f = open('mytext.txt', 'wb')
  2. f.write("你好".encode("utf-8")) #6个字节
  3. f.write(b"ABCD")
  4. f.write(b"\n")
  5. f.write(b"hello abcd\n")
  6. f.close()
  1. f = open('mytell.bin', 'wb')
  2. print("f.tell返回:", f.tell()) #
  3. b = f.read(5)
  4. print(b)
  5. print("f.tell返回:", f.tell()) #
  6. f.close()

F.write(x) 函数

F.seek(偏移量, whence=相对位置)

偏移量: 大于0 的数代表向文件尾放心移动

小于0 的代表向文件头方向

相对位置:

0    代表从文件头开始偏移;

1    代表从当前位置开始偏移;

2     代表从文件尾开始偏移;

  1. f = open('mytell.bin', 'wb')
  2. print("f.tell返回:", f.tell()) #
  3. b = f.read(5)
  4. print(b)
  5. print("f.tell返回:", f.tell()) #
  6.  
  7. f.seek(10, 0) # 从开头向后10个字节
  8. f.seek(5, 1) # 从当前位置向后移5个字节
  9. f.seek(-10, 2) # 从文件尾向前移动10个字节
  10. b = f.read(5) #读5个字节
  11. print(b) #b'12345'
  12.  
  13. f.close()

bytearray类型

bytes 类型不可变类型
bytearray 类型为可变的数据类型

操作
+ += * *=
比较运算:< 、<= > >= == !=
in / not in 运算符
bytearray 的方法
B.clear() 清空
B.append(n) 追加一个字节(n为0-255的整数)
B.remove(value) 删除第一次出现的字节,如果没有出现,则产生ValueERROR错误
B.reverse() 字节的顺序进行反转
B.decode(encoding='utf-8') 转换成字符串
B.find(sub[, start[,end]]) 查找到了会返回大于等于零的数,查找失败返回-1的数;

创建字节串(bytearray)的函数
bytearray()创建空的字节串
bytearray (整数)
bytearray(整型可迭代对象)
bytearray(字符串,encoding='utf-8')
index /slice  索引/切片

  1. bytearray()
  2. bytearray(b'')
  3. bytearray(10)
  4. bytearray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
  5. bytearray([65,66,67,8])
  6. bytearray(b'ABC\x08')
  7. bytearray([65,66,67,68])
  8. bytearray(b'ABCD')
  9. bytearray('ABCD你好','utf-8')
  10. bytearray(b'ABCD\xe4\xbd\xa0\xe5\xa5\xbd')
  11. bytearray(b'abcdef')
  12. bytearray(b'abcdef')
  13. ba1 = bytearray(b'ABCD')
  14. ba2 = bytearray(b'EF')
  15. ba1 + ba2
  16. bytearray(b'ABCDEF')
  17. ba1
  18. bytearray(b'ABCD')
  19. ba1[0]
  20. 65
  21. ba1[0]=97
  22. ba1
  23. bytearray(b'aBCD')
  24. ba3 = bytearray(b'ABCDEF')
  25. ba3[::2]
  26. bytearray(b'ACE')
  27. ba3
  28. bytearray(b'ABCDEF')
  29. ba3.clear()
  30. ba3
  31. bytearray(b'')
  32. ba3.append(97)
  33. ba3
  34. bytearray(b'a')
  35. ba3.append(98)
  36. ba3
  37. bytearray(b'ab')
  38. ba3.append(100)
  39. ba3.append(97)
  40. ba3
  41. bytearray(b'abda')
  42. ba3.remove(97)
  43. ba3
  44. bytearray(b'bda')
  45. ba3.remove(97)
  46. ba3
  47. bytearray(b'bd')
  48. ba3.remove(97)
  49. Traceback (most recent call last):
  50. File "<input>", line 1, in <module>
  51. ValueError: value not found in bytearray
  52. ba = bytearray(b'A1B2C3D4')
  53. ba.reverse()
  54. ba
  55. bytearray(b'4D3C2B1A')
  56. s = ba.decode('utf-8')
  57. s
  58. '4D3C2B1A'
  59. type(s)
  60. <class 'str'>
  61. ba
  62. bytearray(b'4D3C2B1A')
  63. ba.find(bytearray(b'3C'))
  64. 2
  65. ba.find(bytearray(b'3CC'))
  66. -1

练习1

  1. #有一个bytearray字节序列,ba = bytearray(b'a1b2c3d4')
  2. #如何得到1234和abcd
  3. #将上述bytearray 修改为bytearray(b'A1B2C3D4')
  4. ba = bytearray(b'a1b2c3d4')
  5. print(ba[1::2]) #bytearray(b'1234')
  6. print(ba[1::2].decode('utf-8')) #
  7. print(ba[::2].decode('utf-8')) #abcd
  8. #
  9. ba[::2] = 'ABCD'
  10. #ba[::2] = 'ABCD'
  11. #TypeError: can assign only bytes, buffers, or iterables of ints in range(0, 256)
  12. ba[::2] = b'ABCD' #bytearray(b'A1B2C3D4')
  13. ba[::2] = bytearray(b'ABCD') #bytearray(b'A1B2C3D4')

标准输入输出文件:
sys.stdin
sys.stdout
sys.stderr

模块 sys
例子:

------mystdout.py-----------
sys.stdout.write("你好") #标准输出
sys.stdout.write("\n中国\n")

sys.stderr.write("我的出现是个错误\n")#标准错误输出

s = sys.stdin.read() #标准输入
print(s)
--------------
mystdout.py < input.txt
----------------input.txt------
这是标准输入的文本。
》》》
你好
中国
我的出现是个错误
这是标准输入的文本。
=========================================

ctr + D 输入文件结束符
输入重定向的文件内容将发送给sys.stdin

=================

汉字编码:

GB18030 ( GBK ( GB2312 ) )

UNICODE <-> UTF-8

注:BIG5(略过)

GB2312-80编码: 1980年发布,用两个字节进行编码,编码范围(A1A1~FEFE)包含汉字6763个和682个其他字符;

GBK编码:1995年制订,两个字节编码(8140~FEFE)(剔除xx7F)收录文字21003个;

第一个字节: 81-FE

第二个字节: 40-7E, 80-FE

GB18030-2005编码:收录了27533个汉字,用两字节或四字节进行编码;

ISO:

UNICODE -16 (两字节)

0x0000 -- 0xFFFF

ASCII ( 0-127 ) --> (  0x0000-0x007F )

UNICODE-32(四字节)

ASCII (0-127) --->  ( 0x00000000-0x0000007F )

UTF-8 ( 8-bit unicode Transformation Font/Format )

Unicode <<--->>UTF-8 互转

0x0000 ~ 0x007F   一字节

0x0080 ~ 0x07FF   二字节

0x0800 ~ 0xFFFF   三字节(中国落在此区域)

  1. f = open("gb2312.txt",'rb')
  2. b = f.read()
  3. s = b.decode('gbk') #'gbk'/'gb2312'/'gb18030'
  4. print(s)
  5. f.close()
  6. #我是gbk测试中文#gb2312.txt

Python之路,第十六篇:Python入门与基础16的更多相关文章

  1. 【Python之路】第六篇--Python基础之模块

    模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才 ...

  2. Python之路(第二十六篇) 面向对象进阶:内置方法

    一.__getattribute__ object.__getattribute__(self, name) 无条件被调用,通过实例访问属性.如果class中定义了__getattr__(),则__g ...

  3. Python之路(第十六篇)xml模块、datetime模块

    一.xml模块 xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单, xml比较早,早期许多软件都是用xml,至今很多传统公司如金融行业的很多系统的接口还主要 ...

  4. Python之路【第六篇】:socket

    Python之路[第六篇]:socket   Socket socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字&quo ...

  5. Python之路【第六篇】python基础 之面向对象进阶

    一 isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象  和  issubclass(su ...

  6. Python自动化 【第十六篇】:JavaScript作用域和Dom收尾

    本节内容: javascript作用域 DOM收尾 JavaScript作用域 JavaScript的作用域一直以来是前端开发中比较难以理解的知识点,对于JavaScript的作用域主要记住几句话,走 ...

  7. Python之路(第二十四篇) 面向对象初级:多态、封装

    一.多态 多态 多态:一类事物有多种形态,同一种事物的多种形态,动物分为鸡类,猪类.狗类 例子 import abc class H2o(metaclass=abc.ABCMeta): ​ def _ ...

  8. Python之路(第十五篇)sys模块、json模块、pickle模块、shelve模块

    一.sys模块 1.sys.argv 命令行参数List,第一个元素是程序本身路径 2.sys.exit(n) 退出程序,正常退出时exit(0) 3.sys.version . sys.maxint ...

  9. Python之路(第十二篇)程序解耦、模块介绍\导入\安装、包

    一.程序解耦 解耦总的一句话来说,减少依赖,抽象业务和逻辑,让各个功能实现独立. 直观理解“解耦”,就是我可以替换某个模块,对原来系统的功能不造成影响.是两个东西原来互相影响,现在让他们独立发展:核心 ...

  10. Python之路【第六篇】python基础 之面向对象(一)

    一.三大编程范式 1.面向过程编程 2.函数式编程 3.面向对象编程 二.编程进化论 1.编程最开始就是无组织无结构,从简单控制流中按步写指令 2.从上述的指令中提取重复的代码块或逻辑,组织到一起(比 ...

随机推荐

  1. [NOIP 2014TG D1T3] 飞扬的小鸟

    题目描述 Flappy Bird 是一款风靡一时的休闲手机游戏.玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度,让小鸟顺利通过画面右方的管道缝隙.如果小鸟一不小心撞到了水管或者掉在地上的话,便 ...

  2. Hive QL的操作

    一.数据定义DDL操作 创建表: --create table为创建一个指定名字的表 create(external) table table_name --external关键字可以让用户创建一个外 ...

  3. 关于Oracle RAC中SCN原理和机制的探索

    今天看书时看到了关于RAC中SCN的问题,为了进一步搞清楚其内部原理和机制,对该问题进行了广泛的查阅和搜索,遗憾的是,可以参考的资料很少,网上大部分是人云亦云的帖子,其中,详细介绍其内部原理和机制的资 ...

  4. spring boot整合shiro后,部分注解(Cache缓存、Transaction事务等)失效的问题

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/elonpage/article/details/78965176 前言 整合有缓存.事务的sprin ...

  5. 字符串和数组----string

    一.初始化string对象的方式 #include <iostream> #include <string> using std::cout; using std::endl; ...

  6. Vue--项目开发之实现tabbar功能来学习单文件组件2

    上一篇文章里item.vue里的span标签内容是写死了,但是我们不希望写死 所以对于五个tab选项的标题需要从外部传入,也就说 需要在item.vue里的script里写上 export defau ...

  7. 服务消费和负载(Ribbon)

    使用RestTemplate调用服务 在上一篇教程中,我们是这样调用服务的,先通过 LoadBalancerClient 选取出对应的服务,然后使用 RestTemplate 进行远程调用. Load ...

  8. day05 数据类型

    一.整形int 基本使用: 1,用途:记录年龄\等级\各种号码 2定义方式: age=18     age =int(18) x =int(‘123’)#只能将纯数字的字符串转换成整形 print(t ...

  9. Kafka.net使用编程入门(一)

    最近研究分布式消息队列,分享下! 首先zookeeper  和 kafka 压缩包 解压 并配置好! 我本机zookeeper环境配置如下: D:\Worksoftware\ApacheZookeep ...

  10. images