python14基础末异常文件
1.异常的简介
----程序在运行过程中可能会出现一些错误。比如: 使用了不存在的索引,两个不
同类型的数据相加…这些错误我们称之为异常
----处理异常 程序运行时出现异常,目的并不是让我们的程序直接终止!Python
是希望在出现异常时,我们可以编写代码来对异常进行处理
异常
程序在运行的过程当中 不可避免出现一些错误,,,,这些错误 我们称之为异常
异常以后的代码都不会执行
# print(b)#NameError: name 'b' is not definedprint('python')print('java')python
java
print('python')
print(b)
print('java')NameError: name 'b' is not defined
python
●try 语句
●try:
— 代码块(可能出现错误的语句)
●except:
— 代码块(出现错误以后我的处理方式)
●else:
— 代码块(没有出错我要执行的语句)
print('python')
try:print(b)
except:print('出错了...')print('java')python
出错了...
java
加上else语句
print('python')
try:print(b)
except:print('出错了...')
else:print('程序正常执行没有错误...')
print('java')python
出错了...
java
上面的else并没有执行
print('python')
try:print(66)
except:print('出错了...')
else:print('程序正常执行没有错误...')
print('java')python
66
程序正常执行没有错误...
java
2.异常的传播
●当在函数中出现异常时,如果在函数中对异常进行了处理,则异常不会在进
行传播。如果函数中没有对异常进行处理,则异常会继续向函数调用传播。
如果函数调用处处理了异常,则不再传播异常,如果没有处理则继续向调用
处传播。直到传递到全局作用域(主模块)如果依然没有处理,则程序终止,并
显示异常信息。
●当程序运行过程中出现异常以后,所有异常信息会保存到一个异常对象中。
而异常传播时,实际上就是异常对象抛给了调用处
def fn():print('我是fn...')fn()我是fn...
print(100/0)def fn():print('我是fn...')fn()ZeroDivisionError: division by zero零除法错误:被零除
# print(100/0)#ZeroDivisionError: division by zerodef fn():print('我是fn...')print(100 / 0)fn()Traceback (most recent call last):File "D:/LongProject/基础班/异常的传播.py", line 8, in <module>fn()File "D:/LongProject/基础班/异常的传播.py", line 6, in fnprint(100 / 0)
ZeroDivisionError: division by zero
由上可看出第6行出现了异常 但是异常并没有终止 导致我们的第9行也出现了异常
def fn():print('我是fn...')print(100 / 0)try:fn()
except:pass我是fn...
案例
def fn1():print('我是fn1')print(100 / 0)def fn2():print('我是fn2')fn1()def fn3():print('我是fn3')fn2()fn3() #我们直接调用fn3Traceback (most recent call last):File "D:/LongProject/基础班/异常的传播.py", line 31, in <module>fn3()File "D:/LongProject/基础班/异常的传播.py", line 29, in fn3fn2()File "D:/LongProject/基础班/异常的传播.py", line 25, in fn2fn1()File "D:/LongProject/基础班/异常的传播.py", line 21, in fn1print(100 / 0)
ZeroDivisionError: division by zero
我是fn3
我是fn2
我是fn1
由上中line值变化可看出
异常是有一个传播流程的 首先print(100 / 0)这行出现了异常 但是没有处理 然后异常如下图传播 最后传播到全局作用域
#异常的传播
#当中函数中出现了异常,如果你对异常进行处理,则异常不再继续传播
#如果你在函数中没有处理,则异常会继续向函数调用出传播
#直到传递到去全局作用域,如果依然没有处理,则程序终止,并且显示异常信息
#当这个程序在运行的的过程中出现异常,所以异常信息会被保存到一个专门的异常对象中
#而异常传播时,实际上就是异常对象抛给了调用处
这个ZeroDivisionError是个异常对象 因为首字母是大写 这就是类 例如还 NameError
TypeError KeyError
而ZeroDivisionError 就是因为除零错误所以创建一个除零错误的实例
print(ZeroDivisionError)<class 'ZeroDivisionError'>
可以去官网找一些异常信息(Built-in Exceptions 就是内置异常)
https://docs.python.org/3/library/exceptions.html
---------(建议用Google Chrome 转换中文)----------
3.异常的对象
print('异常出现前...')try:print(b)print(100/0)
except:#如果在except后面不加任何的内容,此时它会捕获所有的异常print('开始处理错误了')print('异常出现后...')异常出现前...
开始处理错误了
异常出现后...
print('异常出现前...')try:print(b)print(100/0)
except NameError: #这样它只会捕获NameError#如果在except后面不加任何的内容,此时它会捕获所有的异常print('出现NameError的错误了')print('异常出现后...')异常出现前...
出现NameError的错误了
异常出现后...
print('异常出现前...')try:# print(b)print(100/0)
except NameError: #这样它只会捕获NameError 只会管NameError#如果在except后面不加任何的内容,此时它会捕获所有的异常print('出现NameError的错误了')print('异常出现后...')Traceback (most recent call last):File "D:/LongProject/基础班/异常对象.py", line 5, in <module>
异常出现前...print(100/0)
ZeroDivisionError: division by zero
print('异常出现前...')try:# print(b)print(100/0)
except NameError: #这样它只会捕获NameError 只会管NameError#如果在except后面不加任何的内容,此时它会捕获所有的异常#如果在except后面跟着一个异常类型,那么它只会捕获该类型的异常print('出现NameError的错误了')
except ZeroDivisionError:print('出现ZeroDivisionError的错误了')print('异常出现后...')异常出现前...
出现ZeroDivisionError的错误了
异常出现后...
Exception就是这些类错误(NameError 如TypeError KeyError)的父类
print('异常出现前...')try:# print(b)print(100/0) 这里换成print(b) 再把print(100/0)注释掉 那么结果是不会变的
# except NameError: #这样它只会捕获NameError 只会管NameError
# #如果在except后面不加任何的内容,此时它会捕获所有的异常
# #如果在except后面跟着一个异常类型,那么它只会捕获该类型的异常
# print('出现NameError的错误了')
# except ZeroDivisionError:
# print('出现ZeroDivisionError的错误了')
except Exception:print('我也不知道你是什么异常')
print('异常出现后...')异常出现前...
我也不知道你是什么异常
异常出现后...
下面这种写法就会好很多
print('异常出现前...')try:print(b)# print(100/0)
except Exception as e: #这样就是把异常对象Exception赋值给了e 此时 e 就是异常对象print('出现异常了',e,type(e))
print('异常出现后...')异常出现前...
出现异常了 name 'b' is not defined <class 'NameError'>
异常出现后...
当然 还有最终版
print('异常出现前...')try:print(666)# print(100/0)
except Exception as e: #这样就是把异常对象Exception赋值给了e 此时 e 就是异常对象print('我也不知道你是什么异常',e,type(e))finally:print('无论是是否出现异常我们都会执行')
print('异常出现后...')
try 语句的最终写法
print('异常出现前...')try:print(666/0)# print(100/0)
except Exception as e: #这样就是把异常对象Exception赋值给了e 此时 e 就是异常对象print('出现异常了',e,type(e)) #也可以看出 except此处并非是‘除了’的意思 其后的错误类型如果符合则会执行其语句内的内容 如 print('出现异常了',e,type(e)) finally:print('无论是是否出现异常 我们都会执行')
print('异常出现后...')异常出现前...
出现异常了 division by zero <class 'ZeroDivisionError'>
无论是是否出现异常 我们都会执行
异常出现后...
4.打开文件
●文件(file) 通过Python程序来对计算机中的各种文件进行增删改查的操作 文
件也叫I/O(Input/Output)
●文件的操作步骤
-----打开文件
-----对文件进行各种操作(读、写)然后保存
-----关闭文件
●文件会有一个返回值。返回一个对象,这个对象就表示的是当前的文件
我们先创建一个文件
在文件中写内容
在python中有一个内建函数叫open
按住Ctrl 键加上鼠标左键 点击open( )函数会自动获取一个文件 builtins.py
# open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True)
参数很多但是没关系 有None不用管 真正要管就是前两个参数
文件(File)I/O (Input/Output)
通过python程序来对计算机中的各种文件进行
操作文件的步骤
1. 打开文件
2.对文件进行读写操作(再保存)
3.关闭文件open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True)
参数file 要打开的文件的名字(路径)
返回值,返回的是一个对象 代表的是当前打开的文件file_name='demo.txt'open(file_name) 运行后什么也没有
只要没有报错 就证明他打开了
我们可以整一个错误文件
#返回值,返回的是一个对象 代表的是当前打开的文件
file_name='demo.txt'file_obj=open(file_name)
print(file_obj)<_io.TextIOWrapper name='demo.txt' mode='r' encoding='cp936'> #这就是当前打开的文件对象模式 只读 编码 cp936
我们再把 demo.txt 文件拖入到LongProject 文件夹下
再打开时
可以copy path 下demo.txt文件
D:\LongProject\demo.txt
file_name='demo.txt'
# D:\LongProject\demo.txt
file_name=r'D:\LongProject\demo.txt' 这里前面建议加上一个原始字符串r
file_obj=open(file_name)
print(file_obj)<_io.TextIOWrapper name='D:\\LongProject\\demo.txt' mode='r' encoding='cp936'>
再把demo.txt 移动到基础班文件夹中 方便下面演示
5.关闭文件
●调用close()方法来关闭文件
●with…as 语句不用写close()来关闭。它自带关闭
#当我们获取了文件对象之后,所有的操作都是通过文件对象来操作的(就是关闭 读取都是对文件对象的)
#读取文件内容
#read()函数来读取内容它会将读取到的内容保存到一个字符串当中
file_name='demo.txt'
#当我们获取了文件对象之后,所有的操作都是通过文件对象来操作的(就是关闭 读取都是对文件对象的)#读取文件内容
#read()函数来读取内容它会将读取到的内容保存到一个字符串当中
file_obj=open(file_name)content=file_obj.read()print(content)nkkjlkjkjz
但是如果 demo.txt 文件中内容是汉字 那么会报错的
##关闭文件
#当我们获取了文件对象之后,所有的操作都是通过文件对象来操作的(就是关闭 读取都是对文件对象的)#读取文件内容
#read()函数来读取内容它会将读取到的内容保存到一个字符串当中
file_name='demo.txt'file_obj=open(file_name)content=file_obj.read()#关闭文件
file_obj.close()没有什么结果
file_obj=open(file_name)content=file_obj.read()# print(content)#关闭文件
file_obj.close()file_obj.read()ValueError: I/O operation on closed file.
值错误:对关闭的文件执行I/O操作。
with…as语句
file_name='demo.txt'
#当我们获取了文件对象之后,所有的操作都是通过文件对象来操作的(就是关闭 读取都是对文件对象的)#读取文件内容
#read()函数来读取内容它会将读取到的内容保存到一个字符串当中
file_obj=open(file_name)content=file_obj.read()# print(content)#关闭文件
# file_obj.close()# file_obj.read()
#with...as语句with open(file_name) as file_obj:#在with 语句中直接使用file_obj来操作文件print(file_obj.read()) #如果这里是file_obj.read() 不打印的话执行是没有结果的nkkjlkjkjz
file_name='demo.txt'
#当我们获取了文件对象之后,所有的操作都是通过文件对象来操作的(就是关闭 读取都是对文件对象的)#读取文件内容
#read()函数来读取内容它会将读取到的内容保存到一个字符串当中
file_obj=open(file_name)content=file_obj.read()# print(content)#关闭文件
# file_obj.close()# file_obj.read()
#with...as语句with open(file_name) as file_obj:#在with 语句中直接使用file_obj来操作文件print(file_obj.read())print(file_obj.read())ValueError: I/O operation on closed file.
值错误:对关闭的文件执行I/O操作。
可以看出在 with…as语句外 再打印时 文件已经关闭了
这样的好处是我们不用去手动写close 语句
file_name=‘python’ #就是再次给file_name 赋值
file_name='demo.txt'
file_obj=open(file_name)content=file_obj.read()file_name='python' #就是再次给file_name 赋值
with open(file_name) as file_obj:#在with 语句中直接使用file_obj来操作文件print(file_obj.read())
print(file_obj.read())FileNotFoundError: [Errno 2] No such file or directory: 'python'FileNotFoundError:[Errno 2]没有这样的文件或目录:“python”
我们利用前面学习的知识
file_name='demo.txt'
file_obj=open(file_name)content=file_obj.read()file_name='python' #就是再次给file_name 赋值
try:with open(file_name) as file_obj:#在with 语句中直接使用file_obj来操作文件print(file_obj.read())except FileNotFoundError:print(f'{file_name}文件不存在')python文件不存在
再把file_name='python’注释掉
file_name='demo.txt'
file_obj=open(file_name)content=file_obj.read()# file_name='python' #就是再次给file_name 赋值
try:with open(file_name) as file_obj:#在with 语句中直接使用file_obj来操作文件print(file_obj.read())except FileNotFoundError:print(f'{file_name}文件不存在')nkkjlkjkjz
6.读取文件
在读取文件.py中操作
file_name='demo.txt'try:with open(file_name) as file_obj:content=file_obj.read()print(content)except FileNotFoundError:print(f'{file_name}文件不存在')nkkjlkjkjz
于是我们继续在基础班文件夹下继续创建demo2.txt
file_name='demo2.txt'try:with open(file_name) as file_obj:content=file_obj.read()print(content)except FileNotFoundError:print(f'{file_name}文件不存在')UnicodeDecodeError: 'gbk' codec can't decode byte 0xaf in position 16: illegal multibyte sequence
UnicodeDecodeError:“gbk”编解码器无法解码位置16中的字节0xaf:非法的多字节序列
#用open()来打开了一个文件。打开的文件可以分为2种类型
#一种是纯文本文件(使用utf-8编写的文本文件)
#另一种是二进制文件(广义的说除了纯文本文件剩下的都是二进制文件 狭义的 就是图片 音频 视频 ppt…)
Unicode就是万国码.
open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True)
encoding=None 说明open() 没有设置编码格式 但是最基本的英文(ascii 库)它是可以处理 ,但是中文不能处理
我们可以这样操作
file_name='demo2.txt'try:with open(file_name,encoding='utf-8') as file_obj:content=file_obj.read()print(content)except FileNotFoundError:print(f'{file_name}文件不存在')行不得反求诸己
躬自厚责薄于人
但是有一个隐患 读取较大文件不要用read()
我们可以调用help函数寻求帮助
help(file_obj.read) #此处传函数对象
file_name='demo2.txt'try:with open(file_name,encoding='utf-8') as file_obj:help(file_obj.read) #函数对象content=file_obj.read()print(content)except FileNotFoundError:print(f'{file_name}文件不存在')Help on built-in function read:read(size=-1, /) method of _io.TextIOWrapper instanceRead at most n characters from stream.Read from underlying buffer until we have n characters or we hit EOF.If n is negative or omitted, read until EOF.行不得反求诸己
躬自厚责薄于人
我们只需关注read(size=-1, /)中的size=-1
read()
#read()可以接受一个size作为参数来传递 默认值为-1会读取所有
#该参数是用来指定读取的字符的数量
file_name='demo2.txt'try:with open(file_name,encoding='utf-8') as file_obj:# help(file_obj.read) #函数对象content=file_obj.read(-1) #默认值为-1 加上后所以并不会有什么改变print(content)print(len(content))
except FileNotFoundError:print(f'{file_name}文件不存在')行不得反求诸己
躬自厚责薄于人 因为加上了 一个换行(也就是换行符/n占一个) 所以是 2*7+1=15
15
我们再在demo2.txt中加上两句话
file_name='demo2.txt'try:with open(file_name,encoding='utf-8') as file_obj:#read()可以接受一个size作为参数来传递 默认值为-1会读取所有#该参数是用来指定读取的字符的数量# help(file_obj.read) #函数对象content=file_obj.read(6)print(content)print(len(content))
except FileNotFoundError:print(f'{file_name}文件不存在')行不得反求诸
6
我们在 content=file_obj.read(6)后再跟上 content=file_obj.read(6)
file_name='demo2.txt'try:with open(file_name,encoding='utf-8') as file_obj:#read()可以接受一个size作为参数来传递 默认值为-1会读取所有#该参数是用来指定读取的字符的数量# help(file_obj.read) #函数对象content=file_obj.read(6)content=file_obj.read(6)print(content)print(len(content))
except FileNotFoundError:print(f'{file_name}文件不存在')己
躬自厚责 (接着上面已经读取的读取 6个长度 加上 换行符/n算一个)
6
再加个content=file_obj.read(6)
file_name='demo2.txt'try:with open(file_name,encoding='utf-8') as file_obj:#read()可以接受一个size作为参数来传递 默认值为-1会读取所有#该参数是用来指定读取的字符的数量# help(file_obj.read) #函数对象content=file_obj.read(6)content=file_obj.read(6)content=file_obj.read(6)print(content)print(len(content))
except FileNotFoundError:print(f'{file_name}文件不存在')薄于人
工欲
6
#read()可以接受一个size作为参数来传递 默认值为-1会读取所有
#该参数是用来指定读取的字符的数量
#可以为size指定一个值。这样read()会读取指定数量的字符
#每一次读取的时候都是从上一次读取的位置来读取
#如果剩余字符的数量小于size 则一下读取剩余的内容
上面的读取文件 一下子读取出来的方式 是适合较小文件的
但是大文件就得一点一点读完
再次将demo.txt补充一下
file_name='demo.txt'try:with open(file_name,encoding='utf-8') as file_obj:#read()可以接受一个size作为参数来传递 默认值为-1会读取所有#该参数是用来指定读取的字符的数量#可以为size指定一个值。这样read()会读取指定数量的字符#每一次读取的时候都是从上一次读取的位置来读取#如果剩余字符的数量小于size 则一下读取剩余的内容# help(file_obj.read) #函数对象# content=file_obj.read(6)# content=file_obj.read(6)# content = file_obj.read(6)# print(content)# print(len(content))#定义一个变量来指定读取的大小chunk=100 #此处的100有些不太理解的 但是如果把chunk=10 就会发生奇怪的结果while True:content=file_obj.read(chunk)print(content)# 没有内容退出循环if not content:breakprint(content,end='') #最好是在循环外面打印except FileNotFoundError:print(f'{file_name}文件不存在')
最终操作示范(读取较大文件)
file_name='demo.txt'try:with open(file_name,encoding='utf-8') as file_obj:#read()可以接受一个size作为参数来传递 默认值为-1会读取所有#该参数是用来指定读取的字符的数量#可以为size指定一个值。这样read()会读取指定数量的字符#每一次读取的时候都是从上一次读取的位置来读取#如果剩余字符的数量小于size 则一下读取剩余的内容# help(file_obj.read) #函数对象# content=file_obj.read(6)# content=file_obj.read(6)# content = file_obj.read(6)# print(content)# print(len(content))#定义一个变量来保存结果file_content=''#定义一个变量来指定读取的大小chunk=100while True:content=file_obj.read(chunk)print(content)# 没有内容退出循环if not content:break# print(content,end='') #最好是在循环外面打印file_content+=contentexcept FileNotFoundError:print(f'{file_name}文件不存在')print(file_content)nkkjlkjkjzdfdfsaf
fsafasfsafafsfsadfsdafsdf
dfsafasdfsadfsadf
sdfafasdfagerhrtjhjjnkkjlkjkjzdfdfsaf
fsafasfsafafsfsadfsdafsdf
dfsafasdfsadfsadf
sdfafasdfagerhrtjhjj
除了上面的读取较大文件方式还有另一种
readline( )和readlines( ) (另一种读取较大文件方式)
●readline() 该方法可以读取一行内容
●readlines() 用于一行一行的读取 它会将读取的内容全部封装到一个列表当中返回
还是先拿最初版本(直接读取完的)示范 再…
file_name='demo.txt'with open(file_name,encoding='utf-8') as file_obj:print(file_obj.read())nkkjlkjkjzdfdfsaf
fsafasfsafafsfsadfsdafsdf
dfsafasdfsadfsadf
sdfafasdfagerhrtjhjj 这种方式是不建议使用的
readline() 该方法可以读取一行内容
file_name='demo.txt'with open(file_name,encoding='utf-8') as file_obj:# print(file_obj.read())#readline() 该方法可以读取一行内容print(file_obj.readline())nkkjlkjkjzdfdfsaf
file_name='demo.txt'with open(file_name,encoding='utf-8') as file_obj:# print(file_obj.read())#readline() 该方法可以读取一行内容print(file_obj.readline())print(file_obj.readline())nkkjlkjkjzdfdfsaffsafasfsafafsfsadfsdafsdf
file_name='demo.txt'with open(file_name,encoding='utf-8') as file_obj:# print(file_obj.read())#readline() 该方法可以读取一行内容print(file_obj.readline())print(file_obj.readline())print(file_obj.readline())nkkjlkjkjzdfdfsaffsafasfsafafsfsadfsdafsdfdfsafasdfsadfsadf
但是可以明显的发现换行了
并且是最后一行离Process finished with exit code 0 这行是有2行的 默认只会有一行
所以是自动换行了
file_name='demo.txt'with open(file_name,encoding='utf-8') as file_obj:# print(file_obj.read())#readline() 该方法可以读取一行内容print(file_obj.readline(),end='')print(file_obj.readline(),end='')print(file_obj.readline())nkkjlkjkjzdfdfsaf
fsafasfsafafsfsadfsdafsdf
dfsafasdfsadfsadf
最后一个print(file_obj.readline())没有加end=’’ 所以还是换行了 离Process finished with exit code 0 是两行的
file_name='demo.txt'with open(file_name,encoding='utf-8') as file_obj:# print(file_obj.read())#readline() 该方法可以读取一行内容print(file_obj.readline(),end='')print(file_obj.readline(),end='')print(file_obj.readline(),end='')
readlines() 用于一行一行的读取 它会将读取的内容全部封装到一个列表当中返回
file_name='demo.txt'with open(file_name,encoding='utf-8') as file_obj:#readlines() 用于一行一行的读取 它会将读取的内容全部封装到一个列表当中返回r=file_obj.readlines()print(r)['nkkjlkjkjzdfdfsaf\n', 'fsafasfsafafsfsadfsdafsdf\n', 'dfsafasdfsadfsadf\n', 'sdfafasdfagerhrtjhjj']可看出列表中每一段字符串或者是每一个换行就是一个元素
file_name='demo.txt'with open(file_name,encoding='utf-8') as file_obj:# print(file_obj.read())#readline() 该方法可以读取一行内容# print(file_obj.readline(),end='')# print(file_obj.readline(),end='')# print(file_obj.readline(),end='')#readlines() 用于一行一行的读取 它会将读取的内容全部封装到一个列表当中返回r=file_obj.readlines()print(r)print(len(r))print(r[0])['nkkjlkjkjzdfdfsaf\n', 'fsafasfsafafsfsadfsdafsdf\n', 'dfsafasdfsadfsadf\n', 'sdfafasdfagerhrtjhjj']
4
nkkjlkjkjzdfdfsaf
小小结 end=’ ’ 用于取消换行 /n用于换行
7.文件的写入
●write() 向文件写人内容
●如果操作的是一个文本文件,write()需要传递一个字符串
●操作文件的时候要指定操作的类型
●w表示的是可写 使用w写入文件的时候 如果文本不存在会创建文件 如果存在则会覆盖原文件
●而且这个写入是有返回值的 它返回的是你写入的几个字符
r = file_obj.write(str(66) )
print( r )
即这样的操作
●a表示追加
创建 文件写入.py (文件写入.py要和demo.txt)在基础班文件下
file_name='demo.txt'with open(file_name,encoding='utf-8')as file_obj:#write() 向文件写人内容#如果操作的是一个文本文件,write()需要传递一个字符串file_obj.write('nice to meet you')io.UnsupportedOperation: not writable不支持操作:不可写
open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True)
mode=‘r’ 这个意思就是模式是读 而你是要写 所以你得指定一个类型操作
file_name='demo.txt'with open(file_name,'w',encoding='utf-8')as file_obj:#write() 向文件写人内容#如果操作的是一个文本文件,write()需要传递一个字符串#操作文件的时候要指定操作的类型#w表示的是可写 使用w写入文件的时候 如果文本不存在会创建文件 如果存在则会覆盖原文件file_obj.write('nice to meet you')
我们再看看demo.txt文件里的内容 demo.txt中的内容由原来的乱字母改变成了 nice to meet you
file_name='demo3.txt'with open(file_name,'w',encoding='utf-8')as file_obj:#write() 向文件写人内容#如果操作的是一个文本文件,write()需要传递一个字符串#操作文件的时候要指定操作的类型#w表示的是可写 使用w写入文件的时候 如果文本不存在会创建文件 如果存在则会覆盖原文件file_obj.write('abc')file_obj.write('def') #这样同时写的时候不会覆盖的 这样也是不能说覆盖file_obj.write('ghi') 执行
file_name='demo3.txt'with open(file_name,'w',encoding='utf-8')as file_obj:#write() 向文件写人内容#如果操作的是一个文本文件,write()需要传递一个字符串#操作文件的时候要指定操作的类型#w表示的是可写 使用w写入文件的时候 如果文本不存在会创建文件 如果存在则会覆盖原文件file_obj.write('sdd')file_obj.write('eff') #这写会覆盖原来的(上图中demo.txt的内容)file_obj.write('php')
这算是覆盖了文件的原有内容
file_name='demo3.txt'with open(file_name,'w',encoding='utf-8')as file_obj:#write() 向文件写人内容#如果操作的是一个文本文件,write()需要传递一个字符串#操作文件的时候要指定操作的类型#w表示的是可写 使用w写入文件的时候 如果文本不存在会创建文件 如果存在则会覆盖原文件file_obj.write('sdd')file_obj.write('eff') #这样同时写的时候不会覆盖的file_obj.write('php')file_obj.write(666)TypeError: write() argument must be str, not int
类型错误:write()参数必须是str,而不是int 因为write()需要传递一个字符串
file_name='demo3.txt'with open(file_name,'w',encoding='utf-8')as file_obj:#write() 向文件写人内容#如果操作的是一个文本文件,write()需要传递一个字符串#操作文件的时候要指定操作的类型#w表示的是可写 使用w写入文件的时候 如果文本不存在会创建文件 如果存在则会覆盖原文件file_obj.write('sdd')file_obj.write('eff') #这样同时写的时候不会覆盖的file_obj.write('php')file_obj.write(str(66))
file_name='demo3.txt'with open(file_name,'w',encoding='utf-8')as file_obj:#write() 向文件写人内容#如果操作的是一个文本文件,write()需要传递一个字符串#操作文件的时候要指定操作的类型#w表示的是可写 使用w写入文件的时候 如果文本不存在会创建文件 如果存在则会覆盖原文件file_obj.write('sdd\n')file_obj.write('eff\n') #这样同时写的时候不会覆盖的file_obj.write('php\n')file_obj.write(str(66))
file_name='demo3.txt'with open(file_name,'w',encoding='utf-8')as file_obj:#write() 向文件写人内容#如果操作的是一个文本文件,write()需要传递一个字符串#操作文件的时候要指定操作的类型#w表示的是可写 使用w写入文件的时候 如果文本不存在会创建文件 如果存在则会覆盖原文件#而且这个写入是有返回值的 它返回的是你写入的几个字符file_obj.write('sdd\n')file_obj.write('eff\n') #这样同时写的时候不会覆盖的file_obj.write('php\n')file_obj.write(str(66))r=file_obj.write(str(66)) 若加上/n 即r=file_obj.write(str(66)+\n)print(r)2
file_name='demo3.txt'with open(file_name,'w',encoding='utf-8')as file_obj:file_obj.write('sdd\n')file_obj.write('eff\n') file_obj.write('php\n')r = file_obj.write(str(66) +'\n')print(r)3
file_name='demo3.txt'# with open(file_name,'w',encoding='utf-8')as file_obj:
with open(file_name,'a',encoding='utf-8')as file_obj:#write() 向文件写人内容#如果操作的是一个文本文件,write()需要传递一个字符串#操作文件的时候要指定操作的类型#w表示的是可写 使用w写入文件的时候 如果文本不存在会创建文件 如果存在则会覆盖原文件#而且这个写入是有返回值的 它返回的是你写入的几个字符file_obj.write('sdd\n')file_obj.write('eff\n') #这样同时写的时候不会覆盖的file_obj.write('php\n')r = file_obj.write(str(66) +'\n')# print(r)#a表示追加
当然其他的追加 关于open的方法可以去官网查询
8.操作二进制文件
●b 二进制文件
●读二进制文件 rb
写如二进制文件 wb
追加二进制文件 ab 因为二进制文件比较大所以一点一点读
复制一下位置
C:\Users\Administrator\Desktop
file_name=r'C:\Users\Administrator\Desktop\梦境平原.mp3'with open(file_name,'r') as file_obj:print(file_obj.read(100))执行后UnicodeDecodeError: 'gbk' codec can't decode byte 0xff in position 21: illegal multibyte sequence
UnicodeDecodeError:“gbk”编解码器无法解码位置21中的字节0xff:非法的多字节序列
为什么会报这个错呢 因为这个音乐文件是音频文件 (二进制文件 也就是除了纯文本文件剩的都是二进制文件 )
r 是读取纯文本文件 而rb 读取二进制文件
file_name=r'C:\Users\Administrator\Desktop\梦境平原.mp3'with open(file_name,'rb') as file_obj:#b 二进制文件#读取进制文件是rb 写入二进制文件是wb 追加二进制文件是ab 因为二进制文件比较大所以慢慢读 print(file_obj.read(100))b'ID3\x03\x00\x00\x00\x00\x08\x15TIT2\x00\x00\x00\x0b\x00\x00\x01\xff\xfe\xa6h\x83Xs^\x9fS\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'b就是字节的意思 这个音乐文件都是二进制编码 只不过是以十六进制所表现呈现的
但如大家所看到的读取 打印后确实没什么用 就是上面那一堆
用一个已知的音乐文件 再写入一个与其一样的音乐文件
file_name=r'C:\Users\Administrator\Desktop\梦境平原.mp3'with open(file_name,'rb') as file_obj:#读二进制文件是rb 写如二进制文件是wb 追加二进制文件是ab 因为二进制文件比较大所以一点一点读# print(file_obj.read(100))#定义一个新文件new_name='abc.mp3'with open(new_name,'wb') as new_obj:#定义读取的大小chunk=1024*100while True:content=file_obj.read(chunk)if not content:breaknew_obj.write(content)执行后我们找一下 abc.mp3
右键 Show in Explorer 打开它所在的文件夹
Show in Explorer(在资源管理器中显示)
点击就能播放
python14基础末异常文件相关推荐
- 十九. Python基础(19)--异常
十九. Python基础(19)--异常 1 ● 捕获异常 if VS异常处理: if是预防异常出现, 异常处理是处理异常出现 异常处理一般格式: try: <...............&g ...
- Linux删除证书文件命令,Linux基础面面观之文件复制、移动、删除的命令
用惯Windows的朋友在开始学习Linux时都会觉得在Linux中进行文件的复制.移动和删除工作也是只需点点鼠标或者键盘快捷键就能简单完成,然而事实并没有这么简单.在Linux下进行以上三种操作一般 ...
- 【CXY】JAVA基础 之 异常
讲述: 1.五个关键字 1.try:尝试捕获异常,具体的下面讲述 2.catch:当try捕获到异常了,系统会自动生成一个异常信息,这个异常信息就给catch,形象的说我抓住了这个异常. 3.thro ...
- java 抛出异常的作用_Java 基础之异常抛出
Java 基础之异常抛出 Java,基础,异常抛出 在 Java 里,除了对异常的捕获外,你还可以抛出异常,还可以创造异常.抛出异常的作用就是告诉你的调用者,程序出现了不正常的情况了,得不要期望的结果 ...
- Java 语言基础(异常机制和File类,IO流,多线程,网络编程,反射机制)
原文:Java 语言基础(异常机制和File类,IO流,多线程,网络编程,反射机制) 异常机制和File类 异常机制 基本概念 异常就是"不正常"的含义,在 Java 语言中主要指 ...
- Python基础知识点拾遗---文件IO(os、filecmp、shutil库)、sys库、序列化(pickle)、类
Python基础知识点拾遗 文件IO 文本 目录 os 获取文件的创建.修改及最近访问时间 获取当前文件的大小 获取当前的登录用户名称 获取当前的cpu核数 调用操作系统底层的random生成器 sh ...
- C基础——目标代码文件、可执行文件和库
目标代码文件.可执行文件和库 C编程的基本策略是使用程序将源代码文件转换为可执行文件,此文件包含可以运行的机器语言代码.C分两步完成这一工作:编译和链接.编译器将源代码转换为中间代码,链接器将此中间代 ...
- Java基础知识——异常Throwable和Exception
Java基础知识--异常Throwable和Exception Java设置了异常,旨在鼓励将方法中可能出现的异常告知给使用此方法的程序员(你和我!).当然了,这种方法是比较优雅的,让我们确切的知道是 ...
- IOS开发基础之解压缩文件技术
IOS开发基础之解压缩文件技术 这里我们使用的第三方框架SSZipArchive,第三方依赖libz.tbd 库 ,基于C语言的,加入libz.tbd框架支持. 服务器我们选择是Java Web 的T ...
最新文章
- 大数据能力提升项目| 学生成果展系列之二
- 【运筹学】线性规划 人工变量法 ( 人工变量法案例 | 第三次迭代 | 中心元变换 | 检验数计算 | 最优解判定 )
- 学了C语言,如何利用CURL写一个下载程序?—用nmake编译CURL并安装
- mysql源代码安装
- 数据库编程——intro to JDBC
- String.format() 方法用法解说
- python hackrf_HackRF固件更新及编译环境搭建
- 浅议组播(一文看懂组播)
- linux下copy命令c实现,C语言自己实现linux下cp文件复制命令
- c语言考试答案,C语言考试题及答案
- Qt 5.9.6 下载及安装
- 计算机操作系统之CPU架构和原理(二)
- 使用Java解牛客网六一儿童节
- 为什么我的微信小程序开发工具调试窗口一片空白?
- 简单解释:STM32参考手册的地址偏移和复位值
- Docker之介绍与安装
- DARTS 可微 架构搜索
- jackson 入门
- 《薛兆丰经济学讲义》阅读笔记|第一节-真实世界 经济学的视角
- Worktile:突围,企业协作办公的主旋律