文件操作

半城伤御伤魂 提交于 2020-01-27 15:09:49

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)

在这里插入图片描述

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!