一.编码的进阶:

在python3以后,字符串和bytes类型彻底分开,字符串以字符为单位进行处理的,bytes类型是以字节为单位处理的。

bytes数据类型在所有的操作和使用与字符串方法基本一样,也是不可变的序列对象。

b=b''  #创建一个空的bytes
c=bytes()#创建一个空的bytes
print(b)
print(c)
#这两个是创建空bytes的表示
s1='alex'
print(s1,type(s1))#创建一个字符为alex的变量s1,并打印
s2=b'alex'
print(s2.upper())#将字符串变成大写下的bytes类型
print(s2,type(s2))#s2de bytes类型 结果:
alex <class 'str'>
b'ALEX'
b'alex' <class 'bytes'>
s1='中国'
print(s1,type(s1))#打印中文下的字符串类型 bytes类型不显示中文,这是与str的区别。 s2=s1.encode('utf-8')#将s1以utf-8编码
print(b1,type(b1)) 结果:
中国 <class 'str'>
b'\xe4\xb8\xad\xe5\x9b\xbd' <class 'bytes'>
#这里中国是两个字符 在utf-8编码下是一个字符三个字节 、\xe4是一个字节。

  1.将字符串str 转化为utf-8下的bytes

s1='a太白'
b1=s1.encode('utf-8')#将字符串转化utf-8的bytes
print(b1) 结果:b'a\xe5\xa4\xaa\xe7\x99\xbd'#在utf-8下字符串一个字符占三个字节,字母占用一个字节

  2.将字符串str 转化为 gbk下的bytes。

s1 = 'a太白'
b1 = s1.encode('gbk')#将字符串转化成gbk模式下的bytes。encode编码,decode解码
print(b1) 结果:b'a\xcc\xab\xb0\xd7'#在gbk下一个中文字符占用两个字节,字母占用一个字节

  3.在utf-8编码下的bytes 转化成字符串str (unicode)

b3 = b'a\xe5\xa4\xaa\xe7\x99\xbd'
s1=b3.decode('utf-8')#解码在utf-8模式下转化
print(s1)
结果:
a太白

  4.终极转化:在utf-8编码下的bytes 转化成 gbk编码下的bytes。

b3 = b'a\xe5\xa4\xaa\xe7\x99\xbd'#utf-8下的bytes
#将b3转化成unicode解码
s = b3.decode('utf-8')
#再将s编码成gbk
b4=s.encode('gbk')
print('b4') utf-8 bytes————》unicode————》gbk bytes

  注意:由于utf-8和gbk编码下的英文都是映射于ASCII,所以直接转化。

s1='alex!123’
b1=s1.encode('utf-8')#编码成utf-8 bytes
s2=b1.decode('gbk')#将utf-8 bytes直接转化成 gbk bytes
print(s2)
结果:
alex!12

二.文件操作的初始:

f=open('F:\ pence.txt',encoding='utf-8',mode='r')
print(f.read())
f.close()

这里,f变量:f, f1, file, file_handler, ....文件句柄。

   open()—— python的内置函数,python提供的一个功能。

    底层调用的是操作系统的调用文件命令,借口。

    Windows:编码gbk

    linux,ms:编码utf-8

操作文件的流程:

1.打开文件,产生一个文件句柄。

2.打开文件句柄进行文件操作。

3.关闭文件句柄

三. 文件的读

1.read()用法:

# read ()全部读取
#1. 打开文件,得到文件句柄并赋值给一个变量 f1=open('r模式',encoding='utf-8') #默认是‘r'’模式下 省略不写
#或者写成f1=open('r模式',encoding='utf-8',‘r’)
#这时已经建立一个文件r模式,并以utf-8编码 #2. 通过句柄对文件进行操作 content=f1.read()
print(content,type(content)) #3. 关闭文件
f1.close()
#其中del f一定要发生在f.close()之后,否则就会导致操作系统打开的文件还没有关闭,白白占用资源,
而python自动的垃圾回收机制决定了我们无需考虑del f,这就要求我们,在操作完毕文件后,一定要记住f.close()

2.read(n) 用法:

    r模式下:n 字符

    rb模式下:n 字节

f1 = open('r模式',encoding='utf-8')
print(f1.read(3))#读取文本内的三个字符
f1.close() f1 = open('r模式',mode='rb')
#默认是在utf-8编码
f2=f1.read(3).decode('utf-8')
#读取三个字节 并在以utf-8编码(三个字节对应一个字符)
print(f2)
f1.close() f1 = open('r模式',mode='rb')
print(f1.read(3))
#rb模式下 没有转码 直接显示bytes类型
f1.close()

3.readline()按照行读取数据:

f1 = open('r模式',encoding='utf-8')
print(f1.readline().strip())
#读取第一行
print(f1.readline().strip())
#读取第二行
print(f1.readline().strip())
#读取第三行
f1.close() 结果:
你擦粉回复 理论在茶几上的
djadhajk
迫在眉睫

4. readlines()读取文件所有行数

返回一个list,列表的每个元素是源文件的每一行

f1 = open('r模式',encoding='utf-8')
print(f1.readlines())
f1.close() 结果:
['你擦粉回复 理论在茶几上的\n', 'djadhajk\n', '迫在眉睫\n', '轰轰烈烈']

5.循环读取:

f1=open('r模式',encoding='utf-8')
for line in f1:
print(line)
f1.close()

6. r b 以字节的形式读取,带b的一般操作的都是非文字类的文件.

f1 = open('美女.jpg',mode='rb')
#美女.jpg -非文字类文件,mode='rb'以字节形式读取
print(f1.read())
#返回值是字节
f1.close() 结果:
b'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x01\x00H\x00H\x00\x00\xff\xfe\x00;CREATOR: gd-jpeg v1.0 (using IJG。。。。。。。。。。
# f1 = open('r模式',mode='rb')

# print(f1.read())
# f1.close()

7.r + 读写模式:

先读后写

f1 = open('r模式',encoding='utf-8',mode='r+')
content = f1.read()
print(content)
f1.write('666')
f1.close()
#先读后写,666添加到文件最后

先写后读:

f1 = open('r模式',encoding='utf-8',mode='r+')
f1.write('666')
print(f1.read())
f1.close()
# 先写后读,先把666覆盖文件内容的最前面
#先写入文件,当写入文件操作完成时,光标已经处于末尾处,当继续读取操作时,光标向后读取,所以内容为空。

四.文件的写:

w  w+ wb w+b

# 没有文件,创建文件,写入内容
f = open('w.bak模式',encoding='utf-8',mode='w')
f.write('随便写一点')
f.close()
结果:在文件多了一个w.bak模式文件。文件内的内容是便写一点

  

# 如果有文件,先清空内容,后写入
f = open('w模式',encoding='utf-8',mode='w')
for i in range(4):
f.write('Alex is a lower man\n')
f.close()
#w模式文件是用数据的,运行后 文件内容清空后添加四行Alex is a lower man

wb(以二进制写入,跟r b模式一样。非文字类的文件)

f1 = open('美女.jpg',mode='rb')
content = f1.read()
f2 = open('美女3.jpg',mode='wb')
f2.write(content)
f2.close()
#相当于复制美女.jpg 。复制出一个新文件 美女3.jpg(新生成的文件 之前没有)

五.文件的追加:

a ,   a+ ,  ab,  a+b

# a   没有文件 创建文件,写入内容
f = open('b模式',encoding='utf-8',mode='a')
f.write('很多让人很有成就感的事情')
f.write('很多让人很有成就感的事情')
f.write('很多让人很有成就感的事情')
f.close()
#在文件中创建文件名:b模式,该文件内写入一行三次'很多让人很有成就感的事情'

 

#a  如果存在该文件,直接在内容后直接添加信息
f = open('a模式',encoding='utf-8',mode='a')
f.write('666')
f.close()
# a模式内容后面添加666

六.文件的改

    步骤:1,以读的模式打开原文件.

                     2.以写的模式创建一个新文件

       3.将原文件内容读取出来,按照你的要求改成新内容,写入新文件。

       4.删除原文件

       5.将新文件重命名成原文件

# 1,以读的模式打开原文件.
# 2,以写的模式创建一个新文件.
# import os
# with open('alex自述',encoding='utf-8') as f1,\
# open('alex自述.bak',encoding='utf-8',mode='w') as f2:
# # 3,将原文件内容读取出来,按照你的要求改成新内容,写入新文件.
# old_content = f1.read()
# new_content = old_content.replace('alex','sb')
# f2.write(new_content)
# # 4,删除原文件.
# os.remove('alex自述')
# # 5,将新文件重命名成原文件.
# os.rename('alex自述.bak','alex自述')

  

# import os
# with open('alex自述',encoding='utf-8') as f1,\
# open('alex自述.bak',encoding='utf-8',mode='w') as f2:
# # 3,将原文件内容读取出来,按照你的要求改成新内容,写入新文件.
# for old_line in f1:
# new_line = old_line.replace('alex','sb')
# f2.write(new_line)
#
# # 4,删除原文件.
# os.remove('alex自述')
# # 5,将新文件重命名成原文件.
# os.rename('alex自述.bak','alex自述')

  DAD6-0E0C-5484-441F DA9D-BA31-9F15-FED6 227F-A673-2B7E-FF74 DFBB-8844-FA17-7265

  

day 0308 编码的进阶 文件操作的更多相关文章

  1. python基础编程: 编码补充、文件操作、集合、函数参数、函数递归、二分查找、匿名函数与高阶函数

    目录: 编码的补充 文件操作 集合 函数的参数 函数的递归 匿名函数与高阶函数 二分查找示例 一.编码的补充: 在python程序中,首行一般为:#-*- coding:utf-8 -*-,就是告诉p ...

  2. 员工管理系统+字符编码+Python代码文件操作

    员工管理系统+字符编码+Python代码文件操作 1.员工管理系统 1.1  debug 代码调试 1.先使用鼠标左键在需要调试的代码左边点击一下(会出现一个红点)2.之后右键点击debug运行代码 ...

  3. day07----字符编码解码、文件操作(1)

    字符编码: 什么是字符编码? 字符编码是将人识别的字符转换成计算机能识别的二进制字符(01),转换的规则就是编码表. 人能识别的字符串  与  计算机能识别的二进制字符 两者之间对应关系构成的结构称为 ...

  4. 字符编码和python文件操作

    字符编码和文件操作 目录 字符编码和文件操作 1. 字符编码 1.1 什么是字符编码 1.2 字符编码的发展史 1.2.1 ASCII码 1.2.2 各国编码 1.2.3 Unicode 1.3 字符 ...

  5. 02-python进阶-文件操作

    新建一个文件 内容是从 0-9的整数 #coding:utf-8 f = open('1.txt','w') #r 只读 w 可写 a追加 for i in range(0,10): f.write( ...

  6. Python-字典、集合、字符编码、文件操作整理-Day3

    1.字典 1.1.为什么有字典: 有个需求,存所有人的信息 这时候列表就不能轻易的表示完全names = ['stone','liang'] 1.2.元组: 定义符号()t = (1,2,3)tupl ...

  7. day7 七、字符编码,字符字节与文件操作

    一.字符编码 1.定义:人类能识别的是字符等高级标识符,电脑只能识别0,1组成的标识符,要完成人与机器之间的信息交流,一定需要一个媒介,进行两种标识符的转化(两种标识符的对应关系) 对应关系形成的结构 ...

  8. python基础之 编码进阶,文件操作和深浅copy

    1.编码的进阶 字符串在Python内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码.即先将其他编码的字符串解码(decode)成unicode,再从unic ...

  9. python基础 (编码进阶,文件操作和深浅copy)

    1.编码的进阶 字符串在Python内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码. 即先将其他编码的字符串解码(decode)成unicode,再从uni ...

随机推荐

  1. js判断登陆用户名及密码是否为空的简单实例

    js判断登陆用户名及密码是否为空的简单实例 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 <script type="text/javascript ...

  2. Java编程的逻辑 (81) - 并发同步协作工具

    ​本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http: ...

  3. 【转】Web前端性能优化——如何提高页面加载速度

    前言:  在同样的网络环境下,两个同样能满足你的需求的网站,一个“Duang”的一下就加载出来了,一个纠结了半天才出来,你会选择哪个?研究表明:用户最满意的打开网页时间是2-5秒,如果等待超过10秒, ...

  4. Oracle中Select语句完整的执行顺序

    oracle Select语句完整的执行顺序: .from 子句组装来自不同数据源的数据: .where 子句基于指定的条件对记录行进行筛选: .group by子句将数据划分为多个分组: .使用聚集 ...

  5. (笔记)Linux内核学习(二)之进程

    一 进程与线程 进程就是处于执行期的程序,包含了独立地址空间,多个执行线程等资源. 线程是进程中活动的对象,每个线程都拥有独立的程序计数器.进程栈和一组进程寄存器. 内核调度的对象是线程而不是进程.对 ...

  6. centos6.5安装mongodb2.6

    下载地址:http://www.mongodb.org/downloads 解压命令:tar zxf mongodb-linux-i686-2.6.0.tgz 存放目录:/usr/local/mong ...

  7. tronado学习

    请求处理程序和请求参数: 原创首发:http://www.cnblogs.com/zxlovenet/p/4128644.html 程序将URL映射到tornado.web.RequestHandle ...

  8. Astah 使用 流程图、类图、时序图

    1 流程图         右键 _ create Diagrm _ add Flowchart _ New Flowchart      2 时序图         Create Diagram _ ...

  9. Generate class from database table How can i generate a class from a table at a SQL Server?

    Set @TableName to the name of your table. declare @TableName sysname = 'TableName' declare @Result v ...

  10. Ant 学习笔记

    1.下载Ant 官方网站http://ant.apache.org/bindownload.cgi 下载最新版本  .zip archive: apache-ant-1.9.4-bin.zip [PG ...