博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python-day7-编码,文件操作,列表的深浅copy
阅读量:4886 次
发布时间:2019-06-11

本文共 2586 字,大约阅读时间需要 8 分钟。

今日大纲

1.编码进阶

2.文件操作

3.文件的操作方法

4.with 

5.文件的更改

6.深浅copy

 

 

1.编码进阶

每个编码的存储大小:

(原ascii码表的内容)          (中文)Unicode           2字节                      4字节utf-8             1字节(ascii码表映射)        3字节 gbk(国标)          1字节(映射)                2字节

编码的场景:

内存:只有unicode编码

网络传输、存储硬盘:utf-8、gbk等

 

编码之间的转换:

encode : unicode编码转换成指定编码

decode : 以指定编码解码成unicode编码

s = "泽州"s_utf = s.encode('utf-8')s_gbk = s.encode('gbk')print(s_utf,s_gbk)# b'\xe6\xb3\xbd\xe5\xb7\x9e' b'\xd4\xf3\xd6\xdd's_utf = b'\xe6\xb3\xbd\xe5\xb7\x9e's_gbk = b'\xd4\xf3\xd6\xdd's_utf_uni = s_utf.decode('utf-8')s_gbk_uni = s_gbk.decode('gbk')print(s_utf_uni,s_gbk_uni)#encode 编码  #str(Unicode)  -->  bytes(utf-8 or gbk)#decode 解码  #bytes(utf-8 or gbk)  -->  str(Unicode)#gbk转成utf-8  :gbk编码需要先转换成Unicode,再转成utf-8编码s_gbk = b'\xd4\xf3\xd6\xdd's_uni = s_gbk.decode('gbk')s_utf = s_uni.encode('utf-8')print(s_utf)  #  b'\xe6\xb3\xbd\xe5\xb7\x9e'

参照图: 

 

2.文件操作

f = open(filepath,mode='r',encoding='utf8')

f:文件句柄

filepath:文件路径,windwos分隔路径加 \\ 或字符串前加 r 自动转义

mode:文件的操作模式

r:只读,文件不存在报错r+:读写,先读后写rb:只读二进制形式r+b:读写二进制形式w:只写,创建文件,如果文件存在则清空文件内容w+:写读,先写后读wb:只写二进制形式w+b:写读二进制形式a:追加,文件不存在则创建文件,文件存在则在文件末尾追加,a模式不可读ab:追加二进制形式a+:追加,读

encoding:文件编码解码的格式

  utf-8  gbk注:如果指定了编码解码格式,不能使用二进制操作模式

 

3.文件的操作方法

读操作:

1.read()  一次性把文件内容全读到内存中。2.read(n)  指定读的长度,如果是以r模式读,n为字符,如果是以rb模式读,n为字节读。3.readline()  读取文件一行内容。4.readlines()  读取全部内容,以列表返回,每个元素为每行内容5.for循环读  最好的一种写法,每次只会读一行内容,内存中也只会保存一行文件的内容。

写操作:

write(str)  把数据写入到文件,永久存储,前提模式必须是可写入

其他操作:

close()     文件操作结束,关闭文件    seek(n)  定位光标位置,n是以字节来算的,如果文件中出现utf8编码汉字需要+3才能定位到下个汉字tell()  返回光标位置truncate(n)   截断数据,可不指定n,为光标之前的内容保存,指定n默认从头开始以字节截断数据flush()  write()后内容并不会立即写入硬盘,而是内容在缓冲区,到达一定的量才会写入硬盘中,flush()会强制把缓冲区内容刷新到硬盘readable()  判断文件是否可读writable()  判断文件是否可写

 

4.with

with可以不用写文件关闭,会自动关闭打开的文件

格式为:

  with open(filename,mode,encoding) as f:

注:多个open用  \ 换行写。

with open(filename,mode,encoding) as f, \    open(filename,mode,encoding) as f2:

 

5.文件的更改

1.占内存方式

总结:把文件所有内容读到内存,在内容中修改内容后,清空文件,把新内容写入到文件中

with open('文件修改',encoding='utf-8',mode='r+') as f:    data = f.read()    content = data.replace('泽','test')    f.truncate(0)    f.write(content)

2.占硬盘方式

总结:用for循环都读取原文件,文件一行一行的读取修改写入到新文件,内存里只有一行文件数据

import oswith open('文件修改',encoding='utf-8') as f1,\    open('temp',encoding='utf-8',mode='w') as f2:    for i in f1:        content = i.replace('泽州','张三')        f2.write(content)os.remove('文件修改')os.rename('temp','文件修改')

 

6.深浅copy

浅copy:

  无论在同一代码块下还是不同代码块下:

  创建了一个新的外壳(如列表),列表中的所有元素都是共用的。

深copy:

  无论在同一代码块下还是不同代码块下:

  不仅创建了一个新的外壳,外壳里的可变数据类型(如:列表)也创建了一份,但是不可变类型数据还是共用一份。

深浅copy例子看day3预习篇。

 

转载于:https://www.cnblogs.com/zezhou/p/10495679.html

你可能感兴趣的文章
2017.11.18 手把手教你学51单片机-点亮LED
查看>>
xml的创建与解析
查看>>
grep不区分大小写查找字符串方法
查看>>
linux系统灵活运用灯[android课程3]
查看>>
Android 通用Dialog中设置RecyclerView
查看>>
利用 Android Studio 和 Gradle 打包多版本APK
查看>>
Android 自定义标题栏
查看>>
Android 如何把一个 RelativeLayout或ImageView背景设为透明
查看>>
tomcat优化方向
查看>>
http
查看>>
8-1-组队赛
查看>>
codility: CountTriangles
查看>>
赛斯说
查看>>
python 中的pipe
查看>>
(SQL Analyzer services)定义链接维度
查看>>
squid
查看>>
系统开发管理、架构与设计步步谈随笔索引
查看>>
Java的时间空间复杂度详解
查看>>
有效防止SQL注入漏洞
查看>>
Linux chown命令
查看>>