文件操作,通常是打开,读,写,追加等。
#!/usr/bin/env python # coding:utf-8 ## open实际上是从OS请求,得到文件句柄 f = open('test', encoding='utf-8') # 打开文件,并且使用指定编码 data = f.read() # 读文件 f.close() # 使用完成要记得释放资源 print(data) f2 = open('t2') # 默认以GBK编码读取,所以需要文件也是以同样的编码保存 print(f2.readable()) # 是否可读 d2 = f2.readline() # 一次读一行,会包括末尾的换行符 print(d2,type(d2)) print(f2.readline()) print(f2.readlines()) # 一次读取全部行,以list的形式 f2.close() ## 文件打开模式: 基本,只读,只写 # 默认是只读模式, ''' #1. 打开文件的模式有(默认为文本模式): r ,只读模式【默认模式,文件必须存在,不存在则抛出异常】 w,只写模式【不可读;不存在则创建;存在则清空内容】 a, 之追加写模式【不可读;不存在则创建;存在则只追加内容】 #2. 对于非文本文件,我们只能使用b模式,"b"表示以字节的方式操作(而所有文件也都是以字节的形式存储的,使用这种模式无需考虑文本文件的字符编码、图片文件的jgp格式、视频文件的avi格式) rb wb ab 注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码 #3. 了解部分 "+" 表示可以同时读写某个文件 r+, 读写【可读,可写】 w+,写读【可读,可写】 a+, 写读【可读,可写】 x, 只写模式【不可读;不存在则创建,存在则报错】 x+ ,写读【可读,可写】 xb 更多可参考: http://www.cnblogs.com/linhaifeng/articles/5984922.html#_label2 '''
f = open('测试.txt','w',encoding='utf-8') # f.read() # 只写的文件不可读 print(f.writable()) # 判断是否可写 f.write('1111111111111\n') # 默认会文件内容清空,再写。 f.write('222\n') f.write('3333333\n') f.writelines(['aaaaaaaa\n','bbbbbb\n']) # 以列表的方式写入,且只能是字符串内容。 f.close() fo = open('测试.txt','a',encoding='utf-8') # fo.write('kkkkkkkk\nbbbbbb\n大家都来测试吧。') # print(fo.read()) # 不可读 fo.close()
使用 with 关键字,open的写法不同。
#!/usr/bin/env python # coding:utf-8 # 使用 with关键字,则打开的文件不用手动关闭,python会自动释放资源 with open('t3','r',encoding='utf-8') as f: a = f.read() print(a) # 也可以 with 打开多个文件,换行的话,以 \ 结尾 # 此例自动读取了一个文件,写入到另一个文件。且编码发生改变。 with open('t2','r',encoding='gbk') as f2, \ open('t4','w',encoding='utf-8') as f3: data = f2.read() f3.write(data)
一个小练习,模拟了文件修改的过程。
#!/usr/bin/env python # coding:utf-8 # r+ 模式可读可写,并且容易操作,并且不会清空文件内容。 # fop = open('测试.txt','r+',encoding='utf-8') # fop.write('9999999999') # 如果 r+ 方式一开始就写,那么会从文件头部开始写。 # c = fop.read() # print(c) # # fop.write('\n\nggggggggggg') # fop.close() ## 模拟文件的修改过程,即先将文件读入内存,经过程序修改后,再写入硬盘。 srf = open ('t3','r',encoding='utf-8') da = srf.readlines() srf.close() print(da) lis =[] for i in da: a = i.replace('8','') lis.append(a) # print(list(lis)) # dsf = open('t3','w',encoding='utf-8') dsf.writelines(lis) dsf.write('88888888888888\n') dsf.close()