Python day09

Python day09

字符编码

python3里,默认用的是utf-8读取文件只会将unicode格式的二进制数字转成字符,其余编码格式均不转换,存为二进制数字,所以在python3中,永远无法查看Unicode格式的二进制,但是可以在python2中可以看到,python2中用的是ASCII码,若想用Unicode格式的编码,可以在字符串前面加u如[u’你好’]。而要是想要不乱码,要在文件第一行注明文件写入的字符编码。

文件处理

在Python中打开文件,得到文件句柄并赋值给一个变量是以下列方式进行的

 f=open('a.txt','r',encoding='utf-8')#默认打开模式就为r

操作文件的方法

read() #读取所有内容,光标移动到文件末尾

readline() #读取一行内容

readlines() #读取每一行内容,存放于列表中

write("hehe\n嘻嘻\n") #写入,需要自己写换行符

writelines(["hehe\n",“嘻嘻\n”]) #向文件中写入一序列的字符串。这一序列字符串可以是由迭代对象产生的,如一个字符串列表

readable() #文件是否可读
writable() #文件是否可写
closed #文件是否关闭

encoding #指定的编码格式编码字符串。如果文件打开模式为b,则没有该属性

flush() #立刻将文件内容从内存刷到硬盘。一般不用会降低I/O效率

打开文件的模式:

文本模式t:
r :只读模式【默认模式,文件必须存在,不存在则抛出异常】

w:只写模式【不可读;不存在则创建;存在则清空内容】

a: 追加写模式【不可读;不存在则创建;存在则只追加内容】

对于非文本文件,我们只能使用b模式,"b"表示以字节的方式操作,使用这种模式无需考虑文本文件的字符编码、图片文件的jgp格式、视频文件的avi格式

rb

wb

ab

注意!以b方式打开时,读取到的内容是字节类型,不能指定编码

需要了解的部分

“+” 表示可以同时读写某个文件

r+, 读写【可读,可写】

w+,写读【可读,可写】

a+, 写读【可读,可写】

x, 只写模式【不可读;不存在则创建,存在则报错】

x+ ,写读【可读,可写】

with上下文管理

在执行完子代码块后,with 会自动执行f.close()

with open('a.txt','w') as f:
      pass

也可以使用with同时打开多个文件,用逗号分隔开即可。

with open('a.txt','r') as f,open('b.txt','w') as f1: 

      data = f.read()

      f.write(data)

文件内光标移动

read(3)有两种含义:

在文件打开方式为文本模式时,代表读取3个字符。

而在文件打开方式为b模式时,代表读取3个字节。

seek()
   seek有三种移动方式0,1,2,其中1和2必须在b模式下进行,但无论哪种模式,都是以bytes为单位移动的。
  
truncate()
   truncate是截断文件,所以文件的打开方式必须可写,但是不能用w或w+等方式打开,因为会直接清空文件,所以truncate要在r+或a或a+等模式下测试效果。

文件的修改

文件的数据是存放于硬盘上的,因而只存在覆盖、不存在修改这么一说,所以我们平时看到的修改文件,都是模拟出来的效果,而实现方式有两种。

一、将硬盘存放的该文件的内容全部加载到内存,文件中的数据在内存中是可以修改的,修改完毕后,再由内存覆盖到硬盘(word,vim,nodpad++等编辑器)。

二、将硬盘存放的该文件的内容一行一行地读入内存,修改完毕就写入新文件,最后用新文件覆盖旧文件。

上一篇:day09_流程控制


下一篇:day09-表格表单及统筹