Python自学之路-python文件操作

二、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()
原文地址:https://www.cnblogs.com/wuchangblog/p/13306694.html