代码改变世界

操作文件

2018-07-18 10:29  冻奶香甜玉米片  阅读(220)  评论(0编辑  收藏  举报

model:

r 只读模式(文本模式,就会把二进制转换为字符串)

rb二进制模式打开,后面不需要写encoding,输出的直接是二进制(感觉二进制只是用来视频,图片,文本,进行网络传输和存储)

 

为什么打开文件是encoding,而不是decoding(猜想,encoding不一定是unicode转换为其他字符编码时所用的,还可以是二进制转换为其他字符编码所用,然后在py中再自动转换为unicode

(课堂中说过,用二进制打开,还需要自己手动去decode,即和前面encoding成其他字符编码,再decode成unicode一样))猜想

 

w  是创建模式!!!不是覆盖

w是重新创建一个文件,一样的文件名,一样的文件类型,所以之前的东西就被之后创建的这个文件覆盖了!!!

 

a 追加模式

r+ 读写模式,支持追加 (但因为先读后写,所以只能阅读一开始存在的内容)

w+ 写读模式,支持阅读后来写入的内容(具体如何阅读后来写入的内容还不知,因为还是创建,所以之前的都没了)

 

.tell() 告诉光标当前位置 

 

.seek(num) 把光标移动到某个位置

 

tell和seek是按字节算的

 

read(1)读第一个字符,read是按字符算的

 

truncate()是截断,如果里面不输入num则由光标后面开始截断

输入num 则由num后面的位置开始截断

猜想(光标在0的位置是表示0字节,没有字节,0代表的是位置,即是字节位置从1开始)

要注意不同的字符编码(如gbk汉字两个字节,utf-8汉字3个字节)所对应的字符占有的字节不同,所以tell告诉的位置可能不同

 

.flush()强制把内存中的内容刷新到硬盘上,也就不用.close()后才出现内容

 

.readline() 是每次只读一行,然后光标往下移,使用这个你需要控制怎么继续读下一行

.readlines() 是把内容全部读取然后形成list

 

其实每次输出一行可以:

f=open()

for line in f:

  print(line)

这些操作都要注意换行符

 

open操作的encoding默认编码是操作系统的编码,而不是py的文件头声明编码

py的解释器编码是在进入内存之前使用的,进入内存后py的解释器编码就不能再过问了