文件的扩展模式,文件相关函数,函数的基本定义与概念

2、文件的扩展模式(包含文件的读写追加操作)

utf-8编码中,默认一个中文字符占三个字节,英文或符号占用一个字节

1)r、w、a、rb、wb、ab、r+、w+、a+、rb+、wb+、ab+

(1)r读(文本文件):read读,文件不存在就会报错,文件存在就从头开始读。并且将文件指针放在文件的开头开始读取数据

(2)w写(文本文件):write写,文件不存在就默认创建文件,存在就默认从文件的开头开始写入内容,并且将文件指针放在文件的开头开始写入数据

(3)a追加(文本文件):append追加,文件不存在就默认创建文件,指针默认在文件的末尾

(4)rb读(二进制文件)、wb写(二进制文件)、ab追加(二进制文件):针对二进制文件进行操作,使用方法同上

(5)r+读写(文本文件):读取操作的时候是从当前指针位置向后读取,所以应注意指针位置要旨在文件的头部才会读取整个文件的信息

​ 有两种模式

​ 先读后写:写操作后指针在文件末尾,指针归0(seek(0))后才能读取到数据

​ 先写后读:要事先把指针移到末尾(seek(0,2)),否则在写的时候会把已存在的数据(字符)一对一替换 成后写入的数据,在完成写操作后还要对指针进行归位(seek(0)),才会读取到数据

(6)w+写读(文本文件):写读模式,每次打开都要清空重写

(7)a+追加(文本文件):追加读写模式,再写入内容是,会强制把指针放在文件末尾

(8)rb+读(二进制文件)、wb+写(二进制文件)、ab+追加(二进制文件):针对二进制文件进行操作,使用方法同上

(9)扩展模式 (配合打开模式的辅助模式,自己单独不能使用)

  • plus 增强模式(可以让文件具有读写功能)
    b bytes bytes模式(二进制字节流)
# r+ 先读后写
fp = open("ceshi.txt", mode='r+', encoding="utf-8")
ret = fp.read()
fp.write("789")
fp.seek(0)
ret = fp.read()
fp.close()
print(ret)

# r+ 先写后读
fp = open("ceshi.txt", mode='r+', encoding="utf-8")
fp.seek(0, 2)
fp.write("Excuse me")
fp.seek(0)
ret = fp.read()
fp.close()
print(ret)

# w+ 写读操作
fp = open("ceshi3.txt",mode="w+",encoding="utf-8")
fp.write("The life is interesting")
fp.seek(0)
res = fp.read()
print(res)
fp.close()

# a+ 追加读写操作
fp = open("ceshi3.txt",mode="a+",encoding="utf-8")
fp.write("Trouble is a frend")
fp.seek(0)
res = fp.read()
print(res)
fp.close()

2)read、seek、tell函数

(1)read:读取字符个数,通过字符

(2)seek:调整指针位置,位置是通过字节个数来设置调整的参数的,seek(0)代表指针指在文件的头部;seek(0,2)代表指针指在文件的尾部,(字节参数慎用,容易出现乱码问题)

(3)tell:获取当前光标左侧所有的字节数。注:对中文执行此操作可能会出现乱码

fp = open("ceshi2.txt",mode="r+",encoding="utf-8")
res = fp.read(6)
fp.seek(2)
res = fp.read(2)
total = fp.tell()
print(total)
print(res)
3、文件相关的函数

缓冲区(flush)的刷新:

​ 当文件关闭的时候会自动刷新缓冲区;

​ 当整个程序运行结束的时候自动刷新缓冲区

​ 当缓冲区写满时会自动刷新缓冲区

​ 手动刷新缓冲区

close、readable、writable、readline、readlines、writelines、truncate

(1)close:关闭文件,刷新缓冲区

(2)readable:查看文件是否有可读取的权限

(3)writable:查看文件是否有可写入的权限

(4)readline:只取一行内容,在下面再使用此方法就取下一行内容,可设置参数,参数是以字符为标准的;如果字符参数个数大于当前行总个数,就按照当前行读取,否则如果字符个数 < 当前行总个数 ,按照实际个数读取

(5)readlines:将文件中的内容按照换行读取到列表当中

(6)writelines:将内容是字符串的可迭代性数据写入文件中 参数:内容为字符串类型的可迭代数据

(7)truncate: 把要截取的字符串提取出来,然后清空内容将提取的字符串重新写入文件中 (字节)

(8)文件对象也是可迭代性数据,在遍历的时候默认按照一行一行进行读取

# readable readable close
fp = open("ceshi6.txt", mode="r+", encoding="utf-8")
res1 = fp.readable()
res2 = fp.writable()
print(res1, res2)
fp.close()

# readline
with open("ceshi4.txt" , mode="r+" ,encoding="utf-8") as fp:
	res = fp.readline(2)
	res = fp.readline(20)
	res = fp.readline(200)
	print(res)
# 通过循环读取文件中的所有内容
with open("ceshi4.txt" , mode="r+" ,encoding="utf-8") as fp:
	res = fp.readline()
	while res:
		print(res)
		res = fp.readline()

# readlines
lst_new = []
with open("ceshi6.txt" , mode="r+" ,encoding="utf-8") as fp:
	lst = fp.readlines()
	for i in lst:
		res = i.strip()
		lst_new.append(res)
print(lst_new)

# writelines
lst = ["床前明月光\n", "疑是地上霜\n", "举头望明月\n", "低头思故乡\n"]
with open("ceshi2.txt", mode="w+", encoding="utf-8") as fp:
	lst.insert(1, "阿斯顿发射点发生\n")
	fp.writelines(lst)

# truncate
with open("ceshi2.txt", mode="r+", encoding="utf-8") as fp:
	fp.truncate(6)

十一、函数

功能:包裹一部分代码,实现某一个功能,达成某一个目的

特点:可以反复调用,提高代码复用性,提升开发效率,便于代码维护

1、函数的定义:

​ def 函数名():

​ 代码块

​ 函数的调用:

​ 函数名()

# 函数的定义处
def cfb_99():
	for i in range(1, 10):
		for j in range(1, i+1):
			print("%d*%d=%2d " % (i, j, i*j), end="")
		print()
# 函数的调用
for i in range(10):
	cfb_99()
2、函数的名字
          函数的命名
字母数字下划线,首字符不能为数字
严格区分大小写,且不能使用关键字
函数命名有意义,且不能使用中文哦

驼峰命名法:	
	(1) 大驼峰命名法: 每个单词的首字符都大写 mycar => MyCar (面向对象当中,定义类class)
	(2) 小驼峰命名法: 除了第一个单词小写之外,剩下每个单词首字符大写 mycar => myCar (函数,变量)
命名一个函数 通常用_拼接的形式,组装不同的单词
	mycar => my_car
	symmetric_difference
																		----闻哥专属
3、函数的参数

1)参数的种类:
(1) 形参: 形式上的参数 , 在函数的定义处
(2) 实参: 实际上的参数 , 在函数的调用处

2)形参的种类:
普通(位置)形参,默认形参,普通收集参数,命名关键字参数,关键字收集参数
注:调用时,如果不给实际参数,默认使用自带的值进行调用
调用时,如果给实际参数,那么使用实参来进行调用
默认参数必须跟在普通参数的后面
调用函数时,关键字实参顺序可以任意调整的
关键字实参必须跟在普通实参的身后

3)实参的种类:
普通实参,关键字实参

4)遵循的原则:
调用参数的时,形参和实参必须一一对应,否则报错

# 普通形参
def star(hang,lie):
	i = 0
	while i<hang:
		j = 0
		while j<lie:
			print("*",end="")
			j+=1
		print()
		i+=1
# 普通实参
star(4,9)

# 默认形参
def star(hang=10,lie=10):
	i = 0
	while i<hang:
		j = 0
		while j<lie:
			print("*",end="")
			j+=1
		print()
		i+=1
star()

# 普通形参 + 默认形参
""""""
def star(hang,lie=10):
	i = 0
	while i<hang:
		j = 0
		while j<lie:
			print("*",end="")
			j+=1
		print()
		i+=1

star(20)

# 关键字实参
def star(hang,lie=10):
	i = 0
	while i<hang:
		j = 0
		while j<lie:
			print("*",end="")
			j+=1
		print()
		i+=1

# 关键字实参
star(hang=3,lie=8)
star(lie=8,hang=3)


# 普通实参 + 关键字实参
def star(hang,a,b,c,lie=10):
	i = 0
	while i<hang:
		j = 0
		while j<lie:
			print("*",end="")
			j+=1
		print()
		i+=1
star(3,3,4,5,lie=4)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值