文件句柄:可简单理解为应该内存对象
open()函数 参考 https://www.runoob.com/python3/python3-file-methods.html
读、写、追加
1 ''' 2 txt文件内容: 3 I 4 am 5 very 6 handsome 7 ''' 8 #读(mode = r) 9 f = open('test.txt','r',encoding='utf-8') 10 x = f.readline() #读取文件的一行,这时文件句柄移动到下一行的位置 11 x = f.readlines() #从文件句柄位置开始读取整个文件内容,并将每一行作为一个元素添加到一个列表 12 #当一个文件很大时readlines()是行不通的,他会把整个文件加载到内存,再执行后面的代码 13 #这回耗费很多时间和消耗大量的内存 14 15 # 可以用读一行打印一行的方式加快文件的读取 16 f.seek(0) #将文件句柄挪到文件的开始位置 17 for l in f: 18 print(l.strip(),end=' ') 19 #结果 I am very handsome 20 21 #这个方法在一边读文件一边写文件是很有用的 22 #写(mode = w) 如果目标文件不存在会创建一个,但是如果存在的话会把原文件内容删除,慎用!!! 23 # 备份一个test.txt,名为test_bak.txt 24 f.seek(0) 25 f_w = open('test_bak.txt','w') #encoding 默认utf-8 26 for l in f: 27 f_w.write(l) 28 #完成备份 29 #追加 (mode = a)在原文件的后面追加内容,是不可读的,如果文件不存在会创建一个 30 f_a = open('test.txt','a') 31 f_a.write('lalala') #'lalala' 被添加到了test.txt的末尾 32 f_a.close() 33 f_w.close() 34 f.close()
读写、写读、追加读写
1 ''' 2 txt文件内容: 3 I 4 am 5 very 6 handsome 7 ''' 8 #读写(mode = r+) 9 with open('test.txt','r+') as f_r_p,\ 10 open('test_bak.txt','w+') as f_w_p,\ 11 open('test_a.txt','a+') as f_a_p: 12 ''' 13 用with语法可以省略最后的文件关闭操作,同时可以打开多个文件 14 1.w+,还是会将原文件内容删除然后在进行写读等操作,慎用!!! 15 2.r+,非常实用,但如果要对原文件直接更改是不行的,比如有'I am very handsome'这么一个 16 字符串,如果想把'I'改为'You',见下面代码21-24行,发现打印的结果还是'I',没有变为想要替换 17 的'You',因为在硬盘里的文件已经写死了,硬盘里的后面数据是不会随着前面的数据的变化而前 18 后挪动的,所以要修改文件可以采用复制的方法,就是在创建一个文件,并将修改的内容写入新的 19 文件。 20 ''' 21 x = f_r_p.readline() 22 x.replace('I\n','You\n') 23 f_r_p.seek(0) 24 print(f_r_p.readline()) 25 #将test.txt文件,第一行改为'You',并写入test_a.txt 26 f_r_p.seek(0) 27 for l in f_r_p: 28 print(l,end='') 29 if l=='I\n': 30 f_a_p.write('You\n') 31 else: 32 f_a_p.write(l)
二进制
1 #二进制写(mode = wb) 2 with open('bin.txt','wb') as f_wb: 3 f_wb.write(b'i am bin') 4 #二进制读(mode = rb) 5 with open('bin.txt','rb') as f_rb: 6 print(f_rb.readline())