文件读写
"""
一、文件打开有3种方式
1、读 r #如果打开的文件的时候没有指定模式,那么默认是读
读写模式 r+,只要沾上r,文件不存在的时候,打开都会报错
2、写 w #w模式会清空原有文件内容
写读模式 w+
只要沾上w,他就会把文件内容清空
3、追加 a
追加读写
二、文件指针
f.seek(0)#seek移动指针的时候,只对读好使,对写不好使
当open时文件指针是在初始位置1,当读取4个字节内容是文件指针位置就在4,再write时,文件指针从4移到8,所以,只要控制了文件指针,就能重复的读取了!
操作文件指针可以通过seek方法:
seek(offset, whence):移动文件指针
offset:偏移量,可为负数
whence:偏移相对位置
偏移相对位置为os模块当中的SEEK_SET、SEEK_CUR、SEEK_END:
os.SEEK_SET:表示文件的相对起始位置
os.SEEK_CUR:表示文件的相对当前位置
os.SEEK_END:表示文件的相对结束位置
三、python23的区别
file() #python2里面打开文件还可以用file()
open() #python3
"""
f = open('ybq.txt','a+',encoding='utf-8') f.seek(0)#seek移动指针的时候,只对读好使,对写不好使 print(f.tell())#查看当前文件指针的位置 f.truncate()#清空文件内容 print(f.read())#读取文件里面的全部内容 print(f.readline())#只读取一行的内容 print(f.readlines())#读取文件里面所有的内容,把文件里面每一行的内容放到一个list里面 f.write('mpp'+' ') #写入字符串 print(f.read()) names = ['ybq','mpp','tlx','ply','yjy'] f.writelines(names) st = 'ybq,mpp,tlx' f.writelines(st) f.write(st) #只可写入不可迭代的对象,如字符串 tu=('sdf','sdfs','sdfsd') f.writelines(tu) d={'name':'xx'} f.writelines(d) #写的时候,传入一个可迭代的对象,如列表、元祖、字典 f.close() #打开文件,通过循环向文件中写入数据 f = open('a.txt', 'w') for i in range(3): f.write('xx'+' ') f.close() #高效处理文件的方法 fw = open('ybq.txt',encoding='utf-8') count = 1 #直接循环文件对象的话,就是循环文件里面的每一行 for f in fw: f = f.strip() #去掉空、换行符 stu_lst = f.split(',') #按‘,’分割成列表 print(stu_lst)
文件指针
实验文件data.txt如下:
This file is data.txt
hello world!
My name is mark.
文件指针初始化
f = open('data.txt','r+') print f.tell() # f.write('nice to meet you') f.flush() #flush() 方法是用来刷新缓冲区的,即将缓冲区中的数据立刻写入文件,同时清空缓冲区,不需要是被动的等待输出缓冲区写入。 print f.tell() print f.read() f.close()
相应输出:
//print f.tell()
0
//print f.tell()
16
//print f.read()
a.txt
hello world!
My name is mark.
说明:以’r+‘模式打开文件,文件指针所指位置为0
f.write(‘nice to meet you’)会覆盖原文件内容,文件指针随着移动
print f.read()只会输出剩余内容
f = open(r'test2.txt','a+') print f.tell() f.write('nice to meet you') f.flush() print f.tell() print f.read() f.close()
相应输出:
//print f.tell()
52
//print f.tell()
68
//print f.read()
说明:以’a+’模式打开,文件指针所指位置为文件尾,此例为52
f.write(‘nice to meet you’)会在原文件内容尾添加,文件指针随着移动至68
因为随着write()函数,文件指针已经移到文件末尾,所以print f.read()没有输出