操作文件
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的解释器编码就不能再过问了