python操作文件

 一. 初识文件操作   

使用python来读写文件是非常简单的操作. 我们使用open()函数来打开一个文件, 获取到文件句柄. 然后通过文件句柄就可以进⾏各种各样的操作了. 根据打开方式的不同能够执行的操作也会有相应的差异. 打开文件的方式: r, w, a, r+, w+, a+, rb, wb, ab, r+b, w+b, a+b 默认使用的是r(只读)模式

1.  r

f=open("水浒传",mode="r",encoding="utf-8")
s=f.read()
f.close()     #关闭句柄
print(s)

    需要注意encoding表示编码集. 根据文件的实际保存编码进行获取数据, 对于我们而言. 更多的是utf-8.

../ 返回上一层目录
f=open("chenwei/chen",mode="r",encoding="utf-8")
s=f.read()
print(s)
f.close()

2.w

写的时候注意. 如果没有文件. 则会创建文件, 如果文件存在. 则将原件中原来的内容删除, 再写入新内容

f=open("三国演义",mode="w",encoding="utf-8")
s=f.write("曹操")
f.flush()         #曹操
f.close()
f=open("三国演义",mode="w",encoding="utf-8")
s=f.write("刘备")
f.flush()         #刘备
f.close()

3.a

在追加模式下. 我们写入的内容会追加在文件的结尾.

在原来的基础上进行追加内容.
f=open("三国演义",mode="a",encoding="utf-8")
f.write("诸葛亮")
f.flush()         #刘备诸葛亮
f.close()

4.rb

f=open("明星",mode="rb")
s=f.read()
print(s.decode("utf-8"))          #解码
f.close()

5.wb

f=open("球星",mode="wb")
s=f.write("詹姆斯".encode("utf-8"))
f.close()
詹姆斯

6.ab

f=open("球星",mode="ab")
s=f.write("保罗".encode("utf-8"))
f.close()
詹姆斯保罗

7.r+

f=open("老师点名",mode="r+",encoding="utf-8")
f.write("小明")
s=f.read()
f.flush()
f.close()
print(s)

李四
王五
马六

 对于读写模式. 必须是先读. 因为默认光标是在开头的. 准备读取的. 当读完了之后再进⾏写入. 我们以后使用频率最高的模式就是r+

所以:r+模式, 默认情况下光标在文件的开头, 必须先读, 后写

f=open("老师点名",mode="r+",encoding="utf-8")
s=f.read()
f.write("小明")
f.flush()
f.close()
print(s)
张三
李四
王五
马六小明
总结:
1.在没有任何操作之前进行写. 在开头写

2. 如果读取了一些内容. 再写, 写入的是最后
f=open("名言警句",mode="r+",encoding="utf-8")
s=f.read(3)     #来而不往非礼也,既来之,则安之
f.flush()
f.close()
print(s)  
来而不      

f=open("名言警句",mode="r+",encoding="utf-8")
f.write("哈哈")
f.flush()
f.close()
哈哈不往非礼也,既来之,则安之
f=open("名言警句",mode="r+",encoding="utf-8")
s=f.read(3)             来而不往非礼也,既来之,则安之
f.write("哈哈")          来而不往非礼也,既来之,则安之哈哈 
f.flush()
f.close()
print(s)  
来而不
不管你前面读了几个. 后面去写都是在末尾
1.在没有任何操作之前进行写. 在开头写
2.如果读取了一些内容. 再写, 写入的是最后
f = open("精品", mode="r+", encoding="utf-8")
f.read(3)
f.seek(3)   # 移动到xx位置
# 移动到开头: f.seek(0)  开头
# 移动到末尾: f.seek(0, 2)   末尾 第二个参数有三个值. 0: 再开头,  1: 在当前, 2: 末尾
f=open("名言警句",mode="r+",encoding="utf-8")
f.seek(6)   # 移动6个字节. 2个字
s = f.read(3)   # 读取3个字
print(s)
不往非 来而不往非礼也,既来之,则安之哈哈 f.seek(0) ss
= f.read(3) print(ss) 来而不
f=open("名言警句",mode="r+",encoding="utf-8")
s = f.read()
f.seek(0)                                      来而不往非礼也,既来之,则安之
ss= f.read()
print(s)
print(ss)
来而不往非礼也,既来之,则安之
来而不往非礼也,既来之,则安之

8.w+

f=open("篮球",mode="w+",encoding="utf-8")
f.write("科比")
f.seek(0)
s=f.read()
f.flush()
f.close()
科比
w 操作.会清空原来的内容.  w+是不用的.
9.a+
f=open("篮球",mode="a+",encoding="utf-8")
f.write("姚明")
f.seek(0)
s=f.read()
f.flush()
f.close()
科比姚明

二.文件内容修改

修改文件以及另一种打开文件的方式

文件修改: 只能将文件中的内容读取到内存中, 将信息修改完毕, 然后将源文件删除, 将新文件的名字改成老文件的名字.

import os

with open("玩的",mode="r",encoding="utf-8")as f1,
    open("玩的_副本",mode="w",encoding="utf-8")as f2:
    s=f1.read()
    ss=s.replace("","")
    f2.write(ss)
os.remove("玩的")
os.rename("玩的_副本", "玩的")
台星
羽毛星
篮星
乒乓星
足星
排星
橄榄星
import os

with open("玩的",mode="r",encoding="utf-8")as f1,
    open("玩的_副本",mode="w",encoding="utf-8")as f2:
    for line in f1:
        s = line.replace("", "")
        f2.write(s)
os.remove("玩的")
os.rename("玩的_副本", "玩的")
台球
羽毛球
篮球
乒乓球
足球
排球
橄榄球
如何判断这个文件可以进行什么操作
f = open("球星", mode="r", encoding="UTF-8")
print(f.readable()) # 判断文件是否可读
print(f.writable()) # 是否可写入
True
False

f = open("电视", mode="r", encoding="UTF-8")
l = f.readlines()   # 拿到列表
for s in l:
    ss = s.strip()  # strip() 去掉空格. 还可以去掉换行符, 制表符
    print(ss)
print(l)
f.flush()
f.close()
s = "	哈哈哈哈"
print(s.strip())
哈哈哈哈
truncate()

truncate()
不给参数. 从文件头.截取到当前位置
给了参数. 从文件头截取到你给这个参数的位置
f = open("英雄联盟", mode="r+", encoding="utf-8")
f.seek(12)                            剑圣剑姬剑魔剑豪德玛火男
f.truncate()
剑圣剑姬
f = open("英雄联盟", mode="r+", encoding="utf-8")
f.seek(12)                    剑圣剑姬剑魔剑豪德玛火男
f.truncate(15)  
f.flush()
f.close()
剑圣剑姬剑
f = open("玩的", mode="r", encoding="utf-8")
for line in f:  # 每次读取一行. 赋值给前面的line变量
    print(line)
f.close()
台球

羽毛球

篮球

乒乓球

足球

排球

橄榄球
 
 
 
 
 








原文地址:https://www.cnblogs.com/chenyibai/p/9295944.html