二、open函数和open with
Ⅰ、open
格式:open("路径","打开方式")
打开方式:'r'只读模式, ‘w’写模式,
‘a’追加模式 ,‘b’二进制模式,‘+’读/写模式。
例子1:向文件写入“hello world!!!”,文件不存在就创建
fh=open("d:/file1.txt","w") words1="hello world!!!" fh.write(words1) fh.close()
例子2:读取d盘file1.txt文件的内容
fh2=open("d:/file2.txt","r") data2=fh2.read() print(data2)
>>输出 hello world!!!
例子3:统计文件中一行存在test的行数
count=0 fp=open("e:\file.txt","r",encoding="utf-8") lines=fp.readlines() for i in lines: if "test" in i: print(i) count+=1 print(count)
Ⅱ、with open as
open读写时,每次读写完之后,都要f.close()关闭文件,但是实际中,文件读写可能产生IOError,一旦出错,后面的f.close()就不会调用,python
中的with语句用法可以解决这个问题
with open('../dataconfig/test.json',encoding='utf-8') as f: print(f.read()) 输出结果: hello 我们 326342
打开多个文件进行操作
with open('../dataconfig/test.json',encoding='utf-8') as f1,open('../dataconfig/test1.json',encoding='utf-8')
as f2,open('../dataconfig/test2.json',encoding='utf-8') as f3: for i in f1: j = f2.readline() k = f3.readline() print(i.strip(),j.strip(),k.strip())
三、read和readlines()
Ⅰ、read
read()将文件中的内容全部读取出来,弊端 如果文件很大就会非常的占用内存,容易导致内存奔溃
f = open('path1/小娃娃.txt',mode='r',encoding='utf-8') msg = f.read(3) msg1 = f.read() f.close() print(msg) print(msg1) 结果: 高圆圆 刘亦菲 张柏芝 杨紫 王菲
Ⅱ、readline():readline()读取每次只读取一行
注意点:readline()读取出来的数据在后面都有一个
f = open('path1/小娃娃.txt',mode='r',encoding='utf-8') msg1 = f.readline() msg2 = f.readline() msg3 = f.readline() msg4 = f.readline() f.close() print(msg1) print(msg2) print(msg3) print(msg4) 结果: 高圆圆 刘亦菲 张柏芝 杨紫
解决这个问题只需要在我们读取出来的文件后边加一个strip()就OK了
Ⅲ、readlines()
readlines() 返回一个列表,列表里面每个元素是原文件的每一行,如果文件很大,占内存,容易崩盘
f = open('log',encoding='utf-8') print(f.readlines()) f.close() # 结果['666666 ', 'fkja l; ', 'fdkslfaj ', 'dfsflj ', 'df;asdlf ', ' ', ]
Ⅳ、for循环读取
可以通过for循环去读取,文件句柄是一个迭代器,他的特点就是每次循环只在内存中占一行的数据,非常节省内存
f = open('../path1/弟子规',mode='r',encoding='utf-8') for line in f: print(line) #这种方式就是在一行一行的进行读取,它就执行了下边的功能 print(f.readline()) print(f.readline()) print(f.readline()) print(f.readline()) f.close()