一.初始文件操作
使用open()函数.打开文件,获取文件句柄,并根据不同的模式进行相应的操作.打开方式的不同,可以进行的操作也是不同的.
打开⽂文件的⽅方式: r, w, a, r+, w+, a+, rb, wb, ab, r+b, w+b, a+b 默认使⽤用的是r(只读)模式
二.只读操作( r , rb )
r : ----------------------只读模式-------------mode 对应的是类型 encoding 对应的是 编码类型,一般使用 utf-8 模式
f = open ("宝宝.txt",mode = "r",encoding = "utf-8" )
content = f.read()
print(content)
f.close
rb:----------------------只读模式(b表示的是bytes)---------------
读取出来的是bytes类型,!!!!!在 rb 模式下,不能选择encoding类型
绝对路径: 从磁盘的根目录开始一直都文件名
相对路径:在同一个文件夹下的文件.
读取文件的方法:
1.read() 将文件内容一次性全部提取出来
f = open("宝宝.txt",mode="r",encoding="utf-8")
content = f.read()
print(content) #一次性全部取出,所以有可能内存溢出
2.read( n ) 读取几个字符,如果再次读取就从当前位置开始读取,不是从头开始读.
f = open("宝宝.txt",mode= "r",encoding= "utf-8")
content = f.read(3)
print (content)
3.readline() 一次性读取一行数据 !!! 每一行取出的数据最后都有一个回车.
f = open("宝宝.txt",mode= "r",encoding="utf-8")
content = f.readline()
print(content)
4.readlines() 将每一行作为一个元素添加到一个列表中,类似与将群工部内容一次性读取出来.
f = open("宝宝.txt",mode="r",encoding="utf-8")
lst = f.readlines()
print(lst)
for line in lst:
print(line.strip())
5.循环读写,每次读取一行内容并处理.所以不会出现内存溢出的可能.
f = open("宝宝.txt",mode = "r",encoding="utf-8")
for line in f:
print(line.strip)
三.写模式( w , wb ) !!!只写模式下.不可以读.
写的时候如果没有这个文件,则会创建这个.如果存在文件,则将原文件内容删除,然后再写入内容.
f = open("宝宝.txt",mode="w",encoding="utf-8")
f.write("金毛狮王")
f.flush()
f.close()
wb模式下:可以指定打开文件的编辑器,但是再写文件的时候必须将字符串转成utf-8
f = open("宝宝.txt",mode= "w",encoding="utf-8")
f.writer("金毛狮王".encode("utf-8"))
f.flush()
f.close()
四.追加( a , ab) a-->append
追加就是将内容写到原文件的结尾.
f = open("宝宝.txt",mode= "a",encoding="utf-8")
f.write("麻花藤")
f.flush()
f.close()
五.读写模式( r ,r+b )
之前没有任何操作,write 会从头开始进行覆盖
如果之前进行过其他操作,write就是将内容跟到原文件的末尾.
f = open("宝宝.txt",mode= "r",encoding="utf-8")
content = f.read()
f.write("麻花藤")
print(content)
f.flush()
f.close()
六.写读( w , w+b )
先将原来的内容清空--->然后写入--->读取(读取内容为空)
f = open("宝宝.txt",mode="w+",encoding="utf-8")
f.write("哈哈")
content = f.read()
print(content)
f.flush()
f.close()
七.追加器 a+
a+ 模式下,无论是先读还是后读,都是读不到数据
f = open ("宝宝.txt",mode="a+",encoding="utf-8")
f.write("麻花藤")
content = f.read()
print(content)
f.flush()
f.close()
八.其他相关操作
1.seek( n ) 光标移动到第 n 个位置. -----n的单位是byte 字节
光标移到开头----seek(0)
光标移到末尾----seek(0,2) seek(a,b) b表示光标位置,如果b=0,移到开头,b=1当前位置,b=2光标移到末尾. a表示在当前位置的偏移量.
2.tell() 使用tell()获取光标的位置
九.修改文件
方法: 将原来的文件内容取出来进行操作修改后,放入另一个文件中.
将旧文件删除==>将新文件名字修改为原来的名字.
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("吃的_副本", "吃的") # 重命名文件
# 1,有如下文件,a1.txt,里面的内容为:
#
# 老男孩是最好的培训机构,
# 全心全意为学生服务,
# 只为学生未来,不为牟利。
# 我说的都是真的。哈哈
#
# 分别完成以下的功能:
# a,将原文件全部读出来并打印。
# f = open("a1.txt",mode="r",encoding="utf-8")
# lst = f.readlines()
# for line in lst:
# print(line.strip())
# b,在原文件后面追加一行内容:信不信由你,反正我信了。
# f = open("a1.txt",mode="a",encoding="utf-8")
# f.write(" 信不信由你,反正我信了.")
# f.flush()
# f.close()
# c,将原文件全部读出来,并在后面添加一行内容:信不信由你,反正我信了。
# f = open("a1.txt",mode="r+",encoding="utf-8")
# content = f.read()
# f.write(" 信不信由你,反正我信了.")
# print(content)
# d,将原文件全部清空,换成下面的内容:
#
# 每天坚持一点,
# 每天努力一点,
# 每天多思考一点,
# 慢慢你会发现,
# 你的进步越来越大。
# f = open("a1.txt",mode="w+",encoding="utf-8")
# f.write("""每天坚持一点,
# 每天努力一点,
# 每天多思考一点,
# 慢慢你会发现,
# 你的进步越来越大。""")
# content = f.read()
# print(content)
# f.flush()
# f.close()
# e,将原文件内容全部读取出来,
# 并在‘我说的都是真的。哈哈’这一行的前面加一行,‘你们就信吧~’然后将更改之后的新内容,写入到一个新文件:a1.txt。
# import os
# with open("a1.txt",mode="r",encoding="utf-8") as f1 ,open("a1的副本.txt",mode="a",encoding="utf-8") as f2:
# lst = f1.readlines()
# for line in lst:
# if line.strip() == "我说的都是真的。哈哈":
# f2.write("你们就信吧 我说的都是真的。哈哈")
# else:
# f2.write(line)
# os.remove("a1.txt")
# os.rename("a1的副本.txt","a1.txt")
# 2,有如下文件,t1.txt,里面的内容为:
#
# 葫芦娃,葫芦娃,
# 一根藤上七个瓜
# 风吹雨打,都不怕,
# 啦啦啦啦。
# 我可以算命,而且算的特别准:
# 上面的内容你肯定是心里默唱出来的,对不对?哈哈
#
# 分别完成下面的功能:
# a,以r+的模式打开原文件,判断原文件是否可读,是否可写。
# f =open("t1.txt",mode="r+",encoding="utf-8")
# print(f.readable())
# b,以r的模式打开原文件,利用for循环遍历文件句柄。
# f = open("t1.txt",mode="r",encoding="utf-8")
# lst = f.readlines()
# for line in lst:
# print(line)
# c,以r的模式打开原文件,以readlines()方法读取出来,并循环遍历
# readlines(),并分析b,与c 有什么区别?深入理解文件句柄与# readlines()结果的区别。
# d,以r模式读取‘葫芦娃,’前四个字符。
# f = open("t1.txt",mode="r",encoding="utf-8")
# content = f.read(4)
# print(content)
# e,以r模式读取第一行内容,并去除此行前后的空格,制表符,换行符。
# f = open("t1.txt",mode="r",encoding="utf-8")
# str = f.readline()
# print(str.strip())
# f,以r模式打开文件,从‘风吹雨打.....’开始读取,一直读到最后。
# f = open("t1.txt",mode="r",encoding="utf-8")
# lst = f.readlines()
# count = 0
# while count < len(lst):
# if count >1:
# print(lst[count])
# count += 1
# else:
# count += 1
# g,以a+模式打开文件,先追加一行:‘老男孩教育’然后在从最开始将原内容全部读取出来。
# f = open("t1.txt",mode="a+",encoding="utf-8")
# f.write(" 老男孩教育")
# content = f.read()
# print(content)
# f.flush()
# f.close()
# f = open("t1.txt",mode="r",encoding="utf-8")
# for line in f:
# print(line.strip())
# h,截取原文件,截取内容:‘葫芦娃,葫芦娃,’
# f = open("t1.txt",mode="r+",encoding="utf-8")
# f.truncate(24)
# 3,文件a.txt内容:每一行内容分别为商品名字,价钱,个数。
#
# apple 10 3
# tesla 100000 1
# mac 3000 2
# lenovo 30000 3
# chicken 10 3
#
# 通过代码,将其构建成这种数据类型:
# [{'name':'apple','price':10,'amount':3},{'name':'tesla','price':1000000,'amount':1}......] 并计算出总价钱。
# f = open("a.txt",mode="r",encoding="utf-8")
# lst1 = f.readlines()
# print(lst1)
# lst3 = []
# sum = 0
# for line in lst1:
# dic = {}
# lst2=line.strip().split(" ")
# sum = sum + int(lst2[1])*int(lst2[2])
# count = 0
# while count< len(lst2):
# if count ==0:
# dic["name"]=lst2[count]
# elif count ==1:
# dic["price"]=lst2[count]
# else:
# dic["amount"]=lst2[count]
# count += 1
# lst3.append(dic)
# print(lst3)
# print(sum)
# 4,有如下文件:a4.txt
#
# alex是老男孩python发起人,创建人。
# alex其实是人妖。
# 谁说alex是sb?
# 你们真逗,alex再牛逼,也掩饰不住资深屌丝的气质。
#
# 将文件中所有的alex都替换成大写的SB(文件的改的操作)。
# f = open("a4.txt",mode="r+",encoding="utf-8")
# lst = f.readlines()
# lst2=[]
# for line in lst:
# line = line.replace("alex","SB")
# lst2.append(line)
# print(lst)
# print(lst2)
# import os
# with open("a4.txt",mode="r",encoding="utf-8") as f1 ,open("a4的副本.txt",mode="a",encoding="utf-8") as f2:
# s = f1.read()
# ss =s.replace("alex","SB")
# f2.write(ss)
# os.remove("a4.txt")
# os.rename("a4的副本.txt","a4.txt")
# 5,文件a5.txt内容(升级题)
#
# name:apple price:10 amount:3 year:2012
# name:tesla price:100000 amount:1 year:2013
# .......
#
# 通过代码,将其构建成这种数据类型:
# [{'name':'apple','price':10,'amount':3},
# {'name':'tesla','price':1000000,'amount':1}......]
# 并计算出总价钱。
# f = open("a5.txt",mode="r+",encoding="utf-8")
# lst = f.readlines()
# lst3 = []
# sum = 0
# for line in lst:
# dic = {}
# lst1=line.split(" ")
# lst4 = lst1[1].split(":")
# lst5 = lst1[2].split(":")
# sum = sum + int(lst4[1])*int(lst5[1])
# for el in lst1:
# lst2=el.split(":")
# dic[lst2[0]]=lst2[1].strip()
# lst3.append(dic)
# print(lst3)
# print(sum)
# 6,文件a1.txt内容(升级题)
#
# 序号 部门 人数 平均年龄 备注
# 1 python 30 26 单身狗
# 2 Linux 26 30 没对象
# 3 运营部 20 24 女生多
# .......
#
# 通过代码,将其构建成这种数据类型:
# [{'序号':'1','部门':Python,'人数':30,'平均年龄':26,'备注':'单身狗'},
# ......]
# f = open("a6.txt",mode="r+",encoding="utf-8")
# lst = f.readlines()
# lst3 = []
# for line in lst:
# # print(line)
# lst1=line.split(" ")
# lst2 = []
# dic = {}
# for el in lst1:
# if el == "":
# pass
# else:
# lst2.append(el.strip())
# dic["序号"] = lst2[0]
# dic["部门"] = lst2[1]
# dic["人数"] = lst2[2]
# dic["平均年龄"] = lst2[3]
# dic["备注"] = lst2[4]
# lst3.append(dic)
# print(lst3)