先说结论:
文件r+ open:
1. write()不能实现插入写,它总是覆盖写或附加写;
2. 如果文件一打开即write(),则从开头覆盖写;
3. 如果文件一打开,用f.seek()指定文件指针位置,然后执行f.write()则从指针位置写(覆盖写);
4. 如文件打开后先执行了readline(), 然后再执行write(),实现的是附加写
文件a+ open:
1. 文件打开后起始指针为文件末尾,readline()将读不到数据
2. write()始终是附加写 ,即使将文件指针指到中间再执行write()仍然附加写
共性:
1. write()是先写内存,f.close()时才将物理写入
2. f.tell()函数把'\n'换行符当成一个字符而不是两个,计算偏移量时会是1不会是2
测试过程:
文件companies.txt内容:
tencent
alibaba
baidu
r+模式:
# python version: 3.6.3
>>> f = open(r'python/file/companies.txt','r+')
>>> f.tell() #查看文件指针值
0
>>> f.readline() #读一行
'google\n'
>>> f.tell() #再次查看文件指针值
7
>>> f.write('xxx') #在文件指针位置为7时,尝试写入字符串'xxx'
3
>>> f.tell() #再次查看文件指针值,已经变为文件末尾了
31
>>> f.readline() #再读一行,看下是读到eof还是接着读第二行
'tencent\n'
>>> f.readlines() #实际上还是读第二行,并未从文件指针处开始读,而且第二行中也没有之前写入的'xxx',那么'xxx'写到哪里去了呢?把剩下的行全部读出来
['alibaba\n', 'baidu']
>>> f.seek(