今日内容
- 文件操作
内容详细
1.打开文件
1.open("作业讲解.py",mode="r",encoding="utf-8")
2.文件打开模式
-
r/w/a(只读只写字符串)
-
r+/w+/a+(可读可写)
-
rb/wb/ab(只读只写二进制)
-
字符串转换成"二进制"
v="你好"
data=v.encode("utf-8")
-
二进制转换成字符串
v=""
data=data.decode("utf-8")
-
-
r+b/w+b/a+b(可读可写二进制)
1.mode=r:
以只读方式打开文件 / 不能写 / 如果文件不存在 则报错
#打开文件
file_object=open("作业讲解.py",mode="r",encoding="utf-8")
#读文件
content=file_object.read()
print(content)
#关闭文件
file_object.close()
# mode=r只能读 不能写
file_object.write("dhhd")#文件中写入内容
file_object.close()#关闭文件 将内存中内容保存到存储地
#io.UnsupportedOperation: not writable
2.w:
以只能写方式 打开文件 /不能读 / 写之前内容先被清空 / 文件不存在时候会新建文件
#在写之前先清空文件,一般用于新建文件
#打开文件
file_object=open("file_test.txt",mode="w",encoding="utf-8")
#写内容
file_object.write("测试")
file_object.close()
#"测试"
#mode=w 不能读
file_object=open("file_test.txt",mode="w",encoding="utf-8")
file_object.write("测试")
content=file_object.read()
print(content)
file_object.close()
#io.UnsupportedOperation: not writable
3.a:
以只能追加方式打开文件 / 文件不存在则新建文件 / 光标永远在内容最后位置
#写入:a,只追加不能读 + 不存在则新建
file_object=open("file_test.txt",mode="a",encoding="utf-8")
file_object.write("你好")
file_object.close()
#测试你好
4.r+:
以可读可写方式打开文件
-
读:默认光标从0开始读,也可以通过seek调整光标位置,读物完后会改变光标 位置,所以在写之前需要确定光标位置
-
写:从光标所在的位置开始写,也可以通过seek调整光标位置, 容易覆盖已存在的内容
-
Seek(2): 在写之前改变光标位置 从第二个字节开始
#文件已经存在的文件内容::"今天要好好学习哦" file_object=open("file_test.txt",mode="r+",encoding="utf-8") content=file_object.read()#读取后光标移动到文件最后一个位置 file_object.seek(3)#改变光标位置 从第三个字节后开始写入 file_object.write("你好")#第三个字节后的两个字符,(天要)将会被覆盖 #今你好好好学习哦 file_object.close()
6.w+:
-
写入时候文件内容先被清空,所以读取时需要调整光标
file_object=open("file_test.txt",mode="w+",encoding="utf-8") #在写入之前文件内容就被清空 content=file_object.read() print(content)#打印空 file_object.write("aaaa") file_object.seek(0)#在读取之前需要调整光标位置 不然读取不到值 content1=file_object.read() print(content1) file_object.close()
6.a+ :
在之前文件内容上进行追加,打开文件光标就在内容的最后位置
所以读取的时候需要调整光标
file_object=open("file_test.txt",mode="a+",encoding="utf-8")
#在之前文件内容上进行追加,打开文件光标就在内容的最后位置
# 所以读取的时候需要调整光标
file_object.seek(0)
content=file_object.read()#
print(content)#打印空
# file_object.write("aaaa")
# file_object.seek(0)#在读取之前需要调整光标位置
# content1=file_object.read()
# print(content1)
file_object.close()
7.rb/wb/ab
-
字符串转换成"二进制"encode
v="你好"
data=v.encode("utf-8")
-
二进制转换成字符串decode
v="\xe6"
data=data.decode("utf-8")
#示例1 w f=open("a.txt",mode="w",encoding="utf-8") f.write("你好")#传入字符串 #将“你好” 根据encoding指定的编码转换成二进制: #"你好" -->10001010 10001010 10001010 10001010 10001010 10001010 #将二进制写入到文件中 f.close() #示例二 wb一般用于图片/音频/视频/未知编码 f=open("a.txt",mode="wb")# #1.wb:把要写入的字符串以二进制方式写入 data="我好困" con=data.encode("utf-8") #将写入的字符串按照的utf-8编码转换成二进制 f.write(con) #将二进制内容写入文件 f.close() #示例三rb f=open("a.txt",mode="rb")# #直接读取的是二进制数据 data=f.read() data=f.read(1)#表示一个字节 f.close() print(data)#打印十六进制 new_data=data.decode("utf-8")#二进制转换成字符串 print(new_data)
7.r+b/w+b/a+b(可读可写二进制)
2.操作
1.读取:
-
read() :从文件当前位置(光标) 开始读取整个文件
-
readline():每次读取一行内容,读取时占用内存较小,适合大文件读取
-
readlines():读取文件所有行(包括换行符,特殊字符会被\转义后存储)存放在一个列表中,每行作为一个元素
-
read(2):读取两个字符,当读取模式以rb 时候 表示两个字节
-
#1.去除空格 file_object=open("file_test.txt",mode="r",encoding="utf-8") for line in file_object: line=line.strip() #去除内容中每一行的换行,不然会读取文本的换行符 并打印到屏幕 print(line) # aaaa # hfh # jdjf # jdjjd
#2.read 读取全部文件 data=file_object.read() print(data) print(type(data)) #aaaa #hfh #jdjf #jdjjd #<class 'str'>
#3.readline()读取一行 data=file_object.readline() print(type(data))#<class 'str'> while data:#while循环读取 并记录光标位置 直至读完为止 print(data.strip()) data=file_object.readline() file_object.close() #你好 fh #jdjf #jdjjd
#4.readlines()读取所以行 ata=file_object.readlines()#读取所以行 包括换行符 print(type(data))# <class 'list'> print(data)# ['你\\\\\\n好 fh\n', 'jdjf\n', 'jdjjd\n']#特殊字符\被转义 for line in data: print(line) # 你\\\n好 fh #print("\n")被打印执行 # # jdjf # # jdjjd
2.write()
4.seek():调整光标位置
5.tell():获取当前光标的位置
6.flush():强制将内存的内容刷到硬盘文件中
f=open()
while True:
val=input("请输入:")
f.write(val)
f.flush()#如果不写flush 文件将永远不会关闭 所以内容将永远在内存中 不会保存到硬盘
f.close()
7.关闭
f.close()
with open("a.txt",mode="r"encoding="utf-8") as v:
data=v.read()
#文件执行完毕后将自动关闭
8.文件修改:必须全部拿到内存 进行修改,再重新刷进内存
with open("a.txt",mode="r" encoding="utf-8") as v:
data=v.read()
new_data=data.replace()
with open("a.txt",mode="w" encoding="utf-8") as v:
data=v.write(new_data)
#大文件时候
f1=open("a.txt",mode="r",encoding="utf-8")
f2=open("b.txt",mode="w",encoding="utf-8")
for line in f1:
new_line=line.replace("aa","bb")
f2.write(new_line)
f1.close()
f2.close()
#3.6之后写法
with open("a.txt",mode="r" encoding="utf-8") as f1,with open("b.txt",mode="w" encoding="utf-8") as f2:
for line in f1:
new_line=line.replace("aa","bb")
f2.write(new_line)
3.练习
- 练习1:请将user中的元素根据 _ 连接,并写入 'a1.txt' 的文件
练习1:请将user中的元素根据 _ 连接,并写入 'a1.txt' 的文件
user = ['alex','eric']
con="_".join(user)
file_object=open("gao.txt",mode="w",encoding="utf-8")
file_object.write(con)
file_object.close()
- 练习2:请将user中的元素根据 alex|123形式,写入 'a1.txt' 的文件
#练习2:请将user中的元素根据 alex|123形式,并写入 'a1.txt' 的文件
user = [
{'name':'alex','pwd':'123'}, # alex|123
{'name':'eric','pwd':'olbody'}, # eric|olbody
]
#方案一 读取value值 然后join拼接 加上换行
# file_object=open("gao.txt",mode="w",encoding="utf-8")
# for ele in user:
# ul="|".join(ele.values())
# file_object.write(ul)
# ##alex|123eric|olbody #没有换行
# # ul = ul + "\n"
# # file_object.write(ul)
# #添加回车
# # alex | 123
# # eric | olbody
# file_object.close()
#方案二 占位符实现模式输出
# file_object=open("gao.txt",mode="w",encoding="utf-8")
#
# for ele in user:
# temp="%s|%s\n"%(ele['name'],ele["pwd"],)
# file_object.write(temp)
# file_object.close()
3:请将a1.txt中的文件读取出来并添加到一个列表中
- 去掉文件内容中读取出来的换行(\n)
- 方案一
# 练习3:请将a2.txt中的文件读取出来并添加到一个列表中 ['alex|123','eric|olbody']
file_object=open("gao.txt",mode="r",encoding="utf-8")
data=file_object.read()
file_object.close()
ul=[]
ul.append(data)#data读取出来的字符内容中,包含特殊字符\n 所以会直接放到列表中 ,若直接print(data)则会将”\n”字符串作为一个python语句执行来,所以看不到有\n字符串
print(ul)
print(data)
#去掉换行\n
#方案一 :读取全部内容 然后按照换行来切割
file_object=open("gao.txt",mode="r",encoding="utf-8")
data=file_object.read()
file_object.close()
ul=[]#存放data内容
ul.append(data)
print(ul)#打印data内的全部内容 ['alex|123\neric|olbody\n']
con=data.strip()#去掉字符串两边的换行['alex|123\neric|olbody']
con=con.split("\n")#按照\n切割
list_con=[]
list_con.extend(con)
print(list_con)
D05C82F]1.png)
2.方案二
#方案二 :读取全部内容 一行一行遍历 添加到列表中
result=[]
file_object=open("gao.txt",mode="r",encoding="utf-8")
for line in file_object:
line=line.strip()#去掉每一行换行
result.append((line))
file_object.close()
print(result)
4.总结
-
文件操作
-
打开
-
模式
-
r/w/a(只读只写字符串)
-
r+/w+/a+(可读可写)
-
rb/wb/ab(只读只写二进制)
-
字符串转换成"二进制"
v="你好"
data=v.encode("utf-8")
-
二进制转换成字符串
v=""
data=data.decode("utf-8")
-
-
r+b/w+b/a+b(可读可写二进制)
-
-
操作
-
读
- read():读全部文件
- read(1):
- r:读取一个字符
- rb:读取一个字节
- readline():读取一行
- readlines():一行一行读取整个文件
-
write
-
seek():调整光标位置
-
tell():获取当前光标的位置
-
flush():强制将内存的内容刷到硬盘文件中
f=open() while True: val=input("请输入:") f.write(val) f.flush()#如果不写flush 文件将永远不会关闭 所以内容将永远在内存中 不会保存到硬盘 f.close()
-
关闭
f.close()
-
文件修改:必须全部拿到内存 进行修改,再重新刷进内存
-
-