0
点赞
收藏
分享

微信扫一扫

文件操作与函数的基本结构

晚熟的猫 2022-03-15 阅读 109

文件操作与函数的基本结构

1. > 文件操作

1.1 > 文件内光标的移动

   read(),在文本模式下其括号内的数字表示的是读取指定字符的个数。在二进制模式下 括号内的数字表示的是读取指定的字节数。

   在unicode所有的字符都是用2个bytes来起步表示。在utf8中中文字符是用3个bytes来表示,英文用1个bytes表示。

	
	with open(r'a.txt','r',encoding='utf8') as f:
		print(f.read(3))  # 读取3个字符个数   
		
#---------------------------------文本模式-------------------------------
	
	with open(r'a.txt', 'rb') as f:
		print(f.read(9).decode('utf8'))  # 读取9个字节的二进制个数
		print(f.read(1).decode('utf8'))
#---------------------------------任意模式-------------------------------

1.2 > 控制光标的移动 seek()函数

  seek()函数,可以控制光标的移动 在文本模式下移动的单位也是字节数,当括号内不填模式,默认是0模式,基于文件开头。格式如下:

	seek(offset,whence)
		# offset: 用于控制移动的字节数
		# whence: 控制移动的三种模式

1.2.1 > 三种模式 – 0模式

  让光标移动到位于文件开头的位置,它支持文本模式和二进制模式。

1.2.2 > 三种模式 – 1模式

  让光标停留到位于文件当前的位置,它只支持二进制模式

1.2.2 > 三种模式 – 2模式

  让光标移动到位于文件结尾的位置,它也支持二进制模式


	with open(r'a.txt', 'r', encoding='utf8') as f:
		f.seek(3,0)  # 让光标位于文件开头的第3个字节数后边的位置开始读取文件
		print(f.read())
#---------------------------0模式----------------------------------
	with open(r'a.txt', 'rb') as f:
		f.seek(3,1)  # 让光标位于文件当前位置后3个字节数后,开始读取文件内容
		print(f.read())  # 打印的是2进制代码
#---------------------------1模式----------------------------------
	with open(r'a.txt', 'rb') as f:
		f.seek(-3,2)  # 让光标位于文件结尾位置后,向前先读取3个字节数后,再开始读取文件内容
		print(f.read())  # 打印的是2进制代码

#---------------------------2模式----------------------------------

1.3 > 文件的修改

1.3.1 > 修改方案一

  先将文件中的内容一次性的全部读入到内存当中,然后在内存当中修改,修改完毕之后再覆盖写回原文件。例如:


	with open('b.txt, mode='r', encoding='utf8') as f:
		data = f.read()
	with open('b.txt, mode='w', encoding='utf8') as f:
		f.write(data.replace('old', 'new'))

1.3.2 > 修改方案二

  先将文件以读的方式打开原文件,再以写的方式打开一个临时文件一行行的读取原文件内容,然后进行修改,修改完毕后再写入临时文件。例如:

	with open('b.txt', 'r', encoding='utf8') as read_f,
			open('.b.txt.swap', 'w', encoding='utf8') as write_f:
		for line in read_f:
			write_f.write(line.replace('old', 'new'))

2. > 函数

2.1 > 函数的介绍

  当程序实现的功能较为复杂时,开发人员通常会将其中的功能性代码定义为一个函数,提高代码的复用性、降低代码冗余、使程序结构更加的清晰。函数指的就是被封装起来的、用来实现某种功能的一段代码,它可以被其他函数调用。
  简而言之,代码就是相当于是一个工具,需要我们提前定义好,之后就可以反复的使用。我们自定义的函数又被称之为自定义函数,python解释器提前写好的函数被称之为内置函数。

2.2 > 函数的定义

  在Python中,使用关键字 def 定义函数,其语法格式如下:


	def 函数名([参数列表]):
		["函数文档字符串"]
		函数体
		[return 语句]

  关于上述语法格式的介绍如下:

  (1)def 关键字: 函数以def关键字开头,其后跟函数名和圆括号()。
  (2)函数名: 类似于是变量名,用于标识函数的名称,遵循标识符的命名规则。
  (3)括号:定义函数的时候,函数名后面肯定要先写括号
  (4)参数列表:用于接收传入函数中的数据,可以为空。
  (5)冒号:用于标识函数体的开始
  (6)函数文档字符串:一对由三个单引号包含的字符串,是函数的说明信息,可以省略。
  (7)函数体:实现函数功能的具体代码。
  (8)return语句:用于将函数的处理结果返回给函数调用者,若函数没有返回值,return语句可以省略。

  若函数的参数列表为空,这个函数称为无参函数。定义一个显示3月15的天气状况的无参函数。具体代码如下:


	def weather():
		print("*" * 13)
		print("日期:3月15日")
		print("温度:14~28度")
		print("空气状况:良")
		print("*" * 13)

  函数定义之时可以设置参数列表,以实现更灵活的功能。例如,定义一个可以显示任意日期的天气状况的函数,具体代码如下:

	def modify_weather(today, temp, air_quality):
		print("*" * 13)
		print(f"日期:{today}")
		print(f"温度:{temp}")
		print(f"空气状况:{air_quality}")
		print("*" * 13)

  上述代码中定义的 modify_weather()函数包含3个参数,分别为today、temp、和 air_quality,这参数称为形式参数。其中,参数 today 表示日期,参数 temp表示温度,参数 air_quality 表示空气状况系数。

举报

相关推荐

0 条评论