python日常练习四 文件的读与写

一 文件读写

1.1 打开文件的方式

r:只读模式(默认)
w :只写模式,如果文件不存在就创建,如果存在,写入的数据会覆盖原来的数据
b :二进制模式
t :文本模式
+:可写可读模式
a:追加模式,如果文件存在则文件指针指向文件末尾(追加数据),如果不存在就创建
r+:读追加模式,先读,再追加
w+:写读模式,先写,意味着原本内容丢失,再读。
rb:以二进制格式打开一个文件用于只读,文件指针会放在开头,这是默认格式
wb:以二进制格式打开一个文件用于写入,如果文件已存在将以覆盖,如果文件不存在创建新的文件
ab:以二进制大开一个文件用于追加,如果该文件已存在文件指针将会放在文件的结尾,将新的文件内容写到之前内容的后面,如果文件不存在则重新创建在写

1.2,写数据(write)

格式

对象 = open(“文件”,w)
对象.write(“写入数据”)
对象.close

案例

	f = open('test.txt', 'w') 
	f.write('hello world, i am here!') 
	f.close()

总结

如果文件不存在那么创建,如果存在那么就先清空,然后写入数据

1.3, 读数据(read)

格式

对象 = open(“文件”,w)
对象.write(“写入数据”)
对象.close

案例 :以写的方式打开文件

	f = open('test.txt', 'r') 
	content = f.read() 
	print(content)

案例 :读取指定长度的数据(单位是字节)

	f = open('test.txt', 'r') 
	content = f.read(5) 
	# 最多读取5个数据 print(content)
使用read(num)可以从文件中读取数据,num表示要从文件中读取的数据的长度(单位是字节),如果 没有传入num,那么就表示读取文件中所有的数据

总结

如果用open打开文件时,如果使用的"r",那么可以省略,即只写 open('test.txt') 
如果没有文件,打开报错,存在该文件才能操作 
如果文件中存在中文显示,会出现乱码需要添加encoding='utf-8' open(‘test.txt’,”r”, encoding='utf-8')

1.3.1 读数据(readlines)

就像read没有参数时一样,readlines可以按照行的方式把整个文件中的内容	
进行一次性	读取,并且返 回的是一个列表,其中每一行的数据为一个元素

格式

对象 = open(“文件”,r)
变量 = 对象.readlines()
print(变量)

案例

f = open('test.txt', 'r')
 content = f.readlines() 
 print(content) 
 print(type(content))

1.3.2 (readline)

readline可以按照行的方式把整个文件中的内容进行一行一行的读取

格式

对象 = open(“文件”,r)
变量 = 对象.readline()
print(变量)

2.1.3 可写(a)
格式

对象 = open(“”,a)
对象.write(“写入数据”)
对象.close

案例 :在文件中写入数据

	f = open("test.txt",a) 
	f.write("新的数据") 
	对象.close

总结

(可写)形式打开文件,如果文件不存在则创建并从头添加写入的内容,存在则原有数据后追加数据

二进制文件的读写

1.3.3,读取数据(rb)

格式

对象 = open(“二进制文件”,rb)
变量= 对象.read()
print(变量)

格式2

with open(“二进制文件”,“rb”) as 对象:
变量 = 对象.read()
print(变量)

案例:使用尽可能多的方式实现读取图片

	f = open('33.jpg', 'rb')
	 content = f.read() 
	 print(content)
	with open("33.jpg","rb") as rf: 
	res = rf.read() 
	print(res)

使用习惯:格式2中不需要手动关闭文件,所以经常被使用

总结

如果没有文件,打开报错,存在该文件才能操作

1.3.4,写数据(wb)

格式

with open(“二进制文件”,“wb”) as 对象:
变量 = 对象.write()
print(变量)

案例:备份图片

	with open("1.jpg","rb") as rf:
	 res = rf.read()
	  with open("textjpg.jpg", "wb") as wf: 
	  res = wf.write(res) 
	  print(res)

2.2:关闭文件

格式

close( )

2.3,思考题

如果一个文件很大,比如5G,试想应该怎样把文件的数据读取到内存然后进行处理呢?

调用read()会一次性读取文件的全部内容,如果文件有10G,内存就爆了,所以,要保险起见,可 以反复调用read(size)方法•每次最多读取size个字节的内容。另外,调用readline()可以每次读取一行 内容,调用readlines()一次读取所有内容并按行返回list•因此,要根据需要决定怎么调用。如果文件很 小,read()一次性读取最方便;如果不能确定文件大小,反复调用read(size)比较保险;如果是配置文 件,调用readlines()最方便

二 文件和文件夹的操作

有些时候,需要对文件进行重命名、删除等一些操作,python的os模块中都有这么功能

2.1 文件重命名

os模块中的rename()可以完成对文件的重命名操作

格式

import os
os .rename (“需要修改的文件名”,“新文件名”)

案例

	import os 
	os.rename("test.txt","new.txt")

2.2,删除文件

os模块中的remove()可以完成对文件的重命名操作

格式

import os 
os.remove("文件名")

案例

	import os 
	os.rename("new.txt")
	**文件夹的相关操作**

2.3, 创建文件夹

os模块中的mkdir()可以完成对文件的重命名操作

2.4, 获取当前目录

os模块中的getcwd()可以获取当前目录

三 ,异常

3.1 什么是异常

异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。
 一般情况下,在Python无法正常处理程序时就会发生一个异常。
异常是Python对象,表示一个错误。 当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。

常见异常

f = open("123.txt","r")
 #FileNotFoundError: [Errno 2] No such file or directory: '123.txt' 
list =[1,2,3] print(list[4]) 
#IndexError: list index out of range 
str="jack" 
str.index("v") 
#ValueError: substring not found 
c= 5/0 print(c) 
#ZeroDivisionError: division by zero

3.2 语法

以下为简单的try execept … else 的语法

try: <语句> #运行别的代码
except <名字>:
<语句> #如果在try部份引发了’name’异常
else:
<语句> #如果没有异常发生

捕获异常

	try:open("qwe.txt","r") 
	print("123") 
	except FileNotFoundError: 
	print("异常处理")
	 else:print("没有异常")

捕获异常进行打印 as 获取到实例

	try:open("qwe.txt","r") 
	print("123")
	except FileNotFoundError as result:
	print("异常处理",result) 
	else:
	print("没有异常")

3.3 使用except而不带任何异常类型

你可以不带任何异常类型使用except,如下实例

语法

try:
正常的操作
except :
发生异常,执行这块代码
else:
如果没有异常执行这块代码

案例

	try:open("qwe.txt","r") 
	print("123") 
	except : 
	print("异常处理")
	else:
	print("没有异常")
注意:以上方式try-except语句捕获所有发生的异常。
但这不是一个很好的方式,我们不能通过该程序识别 出具体的异常信息。
因为它捕获所有的异常。

3.4,使用except而带多种异常类型

语法

try:异常的操作 except(Exception1[, Exception2[,…ExceptionN]]]): 发生以上多个异常中的一个,执行这块代码 …
else:如果没有异常执行这块代码

案例

	list = [1,2,3,4] 
	try:
		open("qwe.txt", "r") 
		list[7]
	except (NameError,FileNotFoundError) as rese:
		 print("出现异常") 
	else:
		print("没有异常")

3.5 try -finally 语句

try-finally 语句无论是否发生异常都将执行最后的代码

语法

try:
<语句>
finally:
<语句>
#退出try时总会执行

案例

	try:
		fh = open("test.txt", "r") 
		fh.readlines() 
		fh.close() 
	finally:
	 	print("Error: 没有找到文件或读取文件失败")

注意

当在try块中抛出一个异常,立即执行finally块代码。
 finally块中的所有语句执行后,异常被再次触发,并执行except块代码。
 参数的内容不同于异常

3.6 异常的传递

def func1():
	 print("---func1--1---") 
	 print(num) print("---func1--2---") 
	 # def func2():
	  # print("--func2--1---") 
	  # func1() 
	  # print("--func2--2---") 
def func3(): 
	try:
		print("---func3--1---") 
		func1() 
		print("--func3--2----") 
	except Exception as result: 
		print(result) 
		print("--func3---3---") 
func3()
#func2()

3.7 触发异常

可以使用raise语句自己触发异常

案例

	def functionName( score ):
		if score < 0 or score >100: 
		raise Exception("Invalid score!", score) 
		# 触发异常后,后面的代码就不会再执行 
	functionName(200)

3.8 用户自定义异常

定义

通过创建一个新的异常类,程序可以命名它们自己的异常。
异常应该是典型的继承自Exception类,通过直接 或间接的方式

代码:长度不低于3 为

	class ShortInputException(Exception): 
		def __init__(self, length, atleast):
		 	self.length = length 
		 	self.atleast = atleast 
		def main(): 
		try:
			s = input('请输入 --> ')
			 if len(s) < 3:
			  # raise引发一个你定义的异常
			   raise ShortInputException(len(s), 3) 
		 except ShortInputException as result:
		 #x这个变量被绑定到了错误的实例 
		 print('ShortInputException: 输入的长度是 %d,长度至少应是 %d'% (result.length, result.atleast)) 
		 else:
		 print('没有异常发生') 
main()

四,模块

Python 模块(Module),是一个Python文件,以.py 结尾,包含了Python 对象定义和Python语句
	def test1(): 
		print("我是模块1") 
	def test2():
		print("我是模块2")

4.1:模块的引入

	####  4.1.1:import
	
模块定义好后,我们可以使用 import 语句来引入模块,语法如下

import module1[, module2[,… moduleN]]

test.py 文件代码

	import aa 
		aa.test1()
	 	aa.test2()
	 	#我是模块1
	 	#我是模块2

导入python中的模块os/math

代码:开平方根

import math 
print(math.sqrt(4))
 #2

注意:一个模块只会被导入一次,不管你执行了多少次。这样可以防止导入模块被一遍又一遍地执行。

4.1.2:from…import 语句

把一个模块的所有内容全都导入到当前的命名空间也是可行的,只需使用如下声明:

	from modname import * 	

test.py 文件代码

	from aa import * 
	test1() 
	test2() 
	#我是模块1
	#我是模块2

扩展

使用__all__魔幻方法 当被引入的包中有__all__=(),里面指定的才能被调用,调用的时候使用from模块名 import*

aa.py

	__all__=('test1','test2') 
	def test1(): 
		print("我是模块1")
	def test2(): 
	 	print("我是模块2") 
	def test3(): 	
		print("我是模块2")

test.py

from aa import * 
test1()
test2()
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值