r+、w+、a+各做一次读写
追加写不管游标在哪个位置写的内容都在最后。
用readline读文件的所有内容:
fp = open("f:\\a.txt","r")
while 1:
content = fp.readline()
print(content)
if content == "":
break
fp.close()
readlines()
with open("f:\\a.txt",'r') as f:
for line in f:
print(line)
小练习:写一个文件,内容如下:
a26
b25
c24
d23
…
z1
with open("f:\\a.txt",'w') as fp:
for i in range(26):
fp.write(chr(ord("a")+i)+str(26-i)+"\n")
with open("f:\\a.txt",'r') as fp:
print(fp.read())
with open("f:\\a.txt",'w+') as fp:
for i in range(26):
fp.write(chr(ord("a")+i)+str(26-i)+"\n")
fp.seek(0,0)
print(fp.read())
练习:
游标的第5个位置,第一次写a,读出来,第二次写b,读出来,读出来第二行的一个游标位置的内容
练习:
文件中有两行内容,你在中间再加入一行
fp = open("f:\\b.txt",'r+')
content = fp.readlines()
content.insert(1,"gloryroad\n")
fp.seek(0,0)
fp.writelines(content)
fp.close()
读取指定行的两种方法:
练习:
删除一个文件中所有的空行
fp = open("f:\\a.txt","r+")
lines = fp.readlines()
fp.seek(0,0)
for line in lines:
if line.strip():
fp.write(line)
fp.close()
练习:
找出文件中所有包含test的行数
fp = open("f:\\b.txt","r",encoding = "utf-8")
data = fp.readlines()
fp.close()
test_num = 0
for line in data:
if "test" in line:
test_num+=1
print(test_num)
文件读取的时候,行的末尾包含回车符号的。
print line
read()-----所有的内容读到一个字符串里
readlines()-----所有内容读到一个列表里,每行是列表的一个元素
readline()
简单来说:如果文件很大,你用read()内存不够。
用readline()来读超大文件。
原则:
内存在电脑中是个稀缺资源,如果你大量占用,程序肯定不是最优的。小文件,直接用read()读速度会稍微快一些。
r:read
w:write----清空写,没有回车,写入内容要自己加回车\n
a:append
r+:read and write----不清空内容,可以同时读和写入内容
w+:write and read----先清空内容,然后写入,然后你才可以读取你写入的内容
a+:append and read----追加写,所有写的内容都在文件的最后
rb:read binary
wb:write binary
ab:append binary
练习:
生成10个文件,从1.txt到10.txt
for i in range(1,11):
fp = open("f:\\"+str(i)+".txt","w",encoding = "utf-8")
fp.close()
文件不关闭时,写入的内容如果太少,实际写的内容,并不会立刻写到磁盘上。
如果你没写close(),直接python进程关闭了,操作系统也会自动把内容写入。
小练习:
写一个文件,里面写入从gloryroad1–gloryroad100.
写入之后再读出来
with open("f:\\a.txt","w",encoding = "utf-8") as fp:
for i in range(1,101):
fp.write("gloryroad"+str(i)+"\n")
追加写,写在文件的最后
with open("f:\\a.txt","a",encoding = "utf-8") as fp:
fp.write("hi\n")
r+写,写在文件的最前面
with open("f:\\a.txt","a",encoding = "utf-8") as fp:
fp.write("good evening!\n")
r+:文件打开的时候,r或者w都是默认文件0这个位置
seek(offset,whence)
offset:坐标 正数表示从前向后,负数表示从后向前,0表示最开始的游标
whence:0,1,2
0表示从文件最开始的位置 0,0
1表示从当前位置开始,基于当前的相对位置来重置坐标
10 seek(5,1) 10—>5,现在的坐标是15
2表示从文件的末尾开始,做相对位置来重置坐标
seek(-5,2)---->末尾向前数5个字符
注意:1和2使用基于rb模式
练习:
将文件中的所有alex替换为superman.
with open("f:\\b.txt","r+",encoding = "utf-8") as fp:
s = fp.read()
for i in s:
if "alex" in s:
s=s.replace("alex","superman")
print(s)
with open("f:\\c.txt","w+",encoding = "utf-8") as fp:
fp.write(s)
来源:CSDN
作者:py_xiaobai
链接:https://blog.csdn.net/py_xiaobai/article/details/103856279