1. 文件操作的操作模式
操作模式有四种方式:
- r ,只读模式【默认】
- w,只写模式【不可读;不存在则创建;存在则清空内容;】
- x, 只写模式【不可读;不存在则创建,存在则报错】
- a, 追加模式【不可读; 不存在则创建;存在则只追加内容;】
# 只读模式,r
a = open("name.txt","r") #打开文件,赋予只读的权限
ret = a.read() #读取文件
a.close() #退出文件
print(ret) #打印文件内容
# 只写模式,w, 如果不存在会创建文件,存在则清空内容
a = open("name.txt","w")
a.write("Py小白雨\n")
a.close()
# 只写模式,x, 如果不存在会创建文件,存在则报错
a = open("name.txt","x")
a.write("Py小白雨\n")
a.close()
# 追加模式,a,不可读,不存在则创建文件,存在则会追加内容
a = open("name.txt","a")
a.write("Py小白雨\n")
a.close()
“+” 表示可以同时读写某个文件
- r+, 读写【可读,可写】
- w+,写读【可读,可写】
- x+ ,写读【可读,可写】
- a+, 写读【可读,可写】
#"+"表示具有读写的功能
# r+,读写(可读,可写)
a = open("name.txt","r+",encoding="utf-8")
print(a.tell()) #打开文件后观看指针位置在第几位,默认在起始位置
date = a.read() #第一次读取,指针读取到最后了,(可以加读取的索引位置,3表示只看前三位)
print(date)
a.write("Py小白雨\n") #写的时候会把指针调到最后去写
a.seek(0) #把指针放在第一位进行第二次读取
date = a.read() #第二次读取
print(date)
a.close()
# w+,写读,(可写,可读),先清空内容,在写之后需要把指针放在第一位才能读
a = open("name.txt","w+",encoding="utf-8")
a.write("Py小白雨\n") #清空内容写入
a.seek(0) #把指针放在第一位
date = a.read() #进行读取
a.close() #退出文件
print(date)
# x+,写读,(可写,可读),需要创建一个新文件,文件存在会报错,在写之后需要把指针放在第一位才能读
a = open("name.txt","x+",encoding="utf-8")
a.write("Py小白雨\n") #清空内容写入
a.seek(0) #把指针放在第一位
date = a.read() #进行读取
a.close() #退出文件
print(date)
# a+,写读,(可写,可读),打开文件的同时,指针已经在最后了
a = open("name.txt","a+",encoding="utf-8")
date = a.read() #第一次读,没数据,因为指针在最后
a.write("Py小白雨\n") #往最后写入 张
a.seek(0) #把指针放在第一位,让他进行读取
a.close()
"b"表示以字节的方式操作
- rb 或 r+b
- wb 或 w+b
- xb 或 w+b
- ab 或 a+b
注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型
# "b"表示处理二进制文件
# 只读模式,rb,以字节方式打开,默认打开是字节的方式
a = open("name.txt","rb") #二进制方式读取2.log文件
date = a.read() #定义变量,读文件
a.close() #关闭文件
print(date) #打印文件
str_data = str(date, encoding="utf-8") #字节转换成utf-8
print(str_data) # 打印文件
# 只写模式,wb
a = open("name.txt","wb") #打开文件2.log,可写的模式
date = "Py小白雨\n" #定义字符串
a.write(bytes(date , encoding="utf-8")) #转换成字节,方便计算机识别
a.close() #关闭文件
print(date) #打印出来
# 只写模式,xb,
a = open("name.txt","xb")
date = "Py小白雨\n" #字符串形式会报错,计算机不识别,得转换成字节
a.write(bytes(date,encoding="utf-8"))
a.close()
print(date)
# 追加模式,ab,
a = open("name.txt","ab")
date = "Py小白雨\n"
a.write(bytes(date,encoding="utf-8"))
a.close()
print(date)
2. 文件操作的其它功能
def fileno(self, *args, **kwargs): # real signature unknown
#返回文件句柄在内核中的索引值,以后做IO多路复用时可以用到
def flush(self, *args, **kwargs): # real signature unknown
#把文件从内存buffer里强制刷新到硬盘
def readable(self, *args, **kwargs): # real signature unknown
#判断是否可读
def readline(self, *args, **kwargs): # real signature unknown
#只读一行,遇到\r or \n为止
def seek(self, *args, **kwargs): # real signature unknown
#把操作文件的光标移到指定位置
#*注意seek的长度是按字节算的, 字符编码存每个字符所占的字节长度不一样。
def seekable(self, *args, **kwargs): # real signature unknown
#判断文件是否可进行seek操作
def tell(self, *args, **kwargs): # real signature unknown
#返回当前文件操作光标位置
def truncate(self, *args, **kwargs): # real signature unknown
#按指定长度截断文件
#*指定长度的话,就从文件开头开始截断指定长度,不指定长度的话,就从当前位置到文件尾部的内容全去掉。
def writable(self, *args, **kwargs): # real signature unknown
#判断文件是否可写
3. 文件操作之循环读取文件
f = open(file="name.txt",mode='r')
for line in f:
line = line.split()
name,addr = line
print(name,addr)
f.close()
4. 深浅拷贝
浅拷贝
user = {
"name":"Py小白雨",
"age":18,
"advantage":{
"优势一":"唱跳",
"优势二":"rap",
"优势三":"篮球",
}
}
d2 = user.copy()
user["age"] = 20
user["advantage"]["优势三"] = "打篮球"
print(d2)
print(user)
# {'name': 'Py小白雨', 'age': 18, 'advantage': {'优势一': '唱跳', '优势二': 'rap', '优势三': '打篮球'}}
# {'name': 'Py小白雨', 'age': 20, 'advantage': {'优势一': '唱跳', '优势二': 'rap', '优势三': '打篮球'}}
浅copy会仅复制dict的第一层数据,更深层的advantage下面的值依然是共享一份。
深copy
import copy
user = {
"name":"Py小白雨",
"age":18,
"advantage":{
"优势一":"唱跳",
"优势二":"rap",
"优势三":"篮球",
}
}
d2 = copy.deepcopy(user)
user["age"] = 20
user["advantage"]["优势三"] = "打篮球"
print(d2)
print(user)
# {'name': 'Py小白雨', 'age': 18, 'advantage': {'优势一': '唱跳', '优势二': 'rap', '优势三': '篮球'}}
# {'name': 'Py小白雨', 'age': 20, 'advantage': {'优势一': '唱跳', '优势二': 'rap', '优势三': '打篮球'}}
本文详细介绍了Python中文件操作的不同模式(r, w, x, a及+),包括读写功能、文件操作的高级功能如seek和flush,并展示了如何循环读取文件以及深浅拷贝的区别。
396

被折叠的 条评论
为什么被折叠?



