美文网首页
python 文件及文件夹的操作和异常捕获

python 文件及文件夹的操作和异常捕获

作者: MambaMentality | 来源:发表于2017-07-12 21:00 被阅读0次

1、面向对象的特征:封装、继承、多态

1.1、封装:

函数一种封装,封装了一些逻辑代码

类也是一种封装,封装属性和方法

属性私有化,对外提供可访问的访问

代码更简洁,方便调用,重复利用,扩展性更好。

1.2、继承:

将公共有内容放在父类中,子类只关注自己特有的属性和方法。

代码更简洁,方便调用,重复利用,扩展性更好。

1.3、多态:

一个对象,赋不同的值,有不同的形态。

在其它语言中,将子类对象赋值给父类对象,这样父类对象会呈现不同的状态。

python本身是一种弱类型语言,没有要求变量的类型。

类型是根据值类型判断的。所有不完全符合多态的要求。

所以说python不支持多态。

2.实现文件的复制粘贴(注重模块化思维,设计模式的融入)

1、输入源文件的路径

2、输入源文件的名字

3、输入目标路径

4、执行复制粘贴

5、要求复制到目标路径里,默认是原来文件的名字,如果此名字已经在当前路径里,把名字改成如下格式(需要加副本或者对应的数字):

import os

import os.path

def main():

pathSrc = input('请输入源文件的路径:')

fileName = input('请输入源文件的名字:')

pathDest = input('请输入目标文件夹的路径:')

i = 2

while True:

if not hasFile(pathDest,fileName):

copy_paste(os.path.join(pathSrc,fileName),os.path.join(pathDest,fileName))

break

elif not hasFile(pathDest,doFileName(fileName)):

copy_paste(os.path.join(pathSrc,fileName),os.path.join(pathDest,doFileName(fileName)))

break

elif not hasFile(pathDest,doFileName(fileName,i)):

copy_paste(os.path.join(pathSrc,fileName),os.path.join(pathDest,doFileName(fileName,i)))

break

else:

i+=1

def hasFile(path,fileName):

'''

判断文件是否存在

path:文件所在的路径

fileName:文件的名字

'''

return os.path.exists(os.path.join(path,fileName))

def doFileName(fileName,num=None):

'''

返回处理后文件的名字

如果num是None,只拼接副本

否则,拼接副本加数字

'''

newFileName = None

index = fileName.rfind('.')

if num==None:

if index!=-1:

newFileName = '%s - 副本%s'%(fileName[:index],fileName[index:])

else:

newFileName= '%s - 副本'%fileName

else:

if index!=-1:

newFileName = '%s - 副本 (%s)%s'%(fileName[:index],num,fileName[index:])

else:

newFileName= '%s - 副本 (%s)'%(fileName,num)

return newFileName

def copy_paste(pathSrc,pathDest):

'''赋值 粘贴'''

fileSrc = open(pathSrc,'rb')

fileDest = open(pathDest,'wb')

content = fileSrc.readline()

while content!=b'':

fileDest.write(content)

content = fileSrc.readline()

fileSrc.close()

fileDest.close()

'''

执行。。。。。。。

'''

main()

3.异常的捕捉

3.1 完整的格式内容:

try:

      pass

except Exception as ex:

      pass

else:

      pass

finally:

     pass

3.2 try except 用法

·把可能出现问题的代码,放在try中 。·把处理异常的代码,放在except中

·3.2.1 except 多个异常的情况

try:

print('-----test--1---')

open('123.txt','r')#如果123.txt文件不存在,那么会产生IOError异常

print('-----test--2---')

print(num)#如果num变量没有定义,那么会产生NameError异常

except(IOError,NameError):

#如果想通过一次except捕获到多个异常可以用一个元组的方式

# errorMsg里会保存捕获到的错误信息

print(errorMsg)

注意事项:·当捕获多个异常时,可以把要捕获的异常的名字,放到except后,并使用元组的方式仅进行存储

3.2.2 捕获异常具体描述

3.3 finally

注意:无论是否有异常,finally里代码都会执行

有一些资源使用完毕之后,需要关闭释放资源。

无论是否有异常,都得关闭,那么这样的代码可以写到finally中

import time

try:

f = open('test.txt')

try:

whileTrue:

content = f.readline()

iflen(content) ==0:

break

time.sleep(2)

print(content)

except:

#如果在读取文件的过程中,产生了异常,那么就会捕获到

#比如 按下了ctrl+c

pass

finally:

f.close()

print('关闭文件')

except:

print("没有这个文件")

3.4  异常的嵌套1

‘’‘

import time

try:

#f = open('test.txt')

f = open(r'C:\Users\Administrator\Desktop\xx.txt')

try:

while True:

content = f.readline()

if len(content) == 0:

break

num=1/0 #模拟一个异常

#time.sleep(2)

print(content)

#except:

#print('except...')

finally:

f.close()

print('关闭文件')

except:

print('没有这个文件')

'''

3.5 异常的嵌套2

def test1():

print("----test1-1----")

print(num)

print("----test1-2----")

'''

def test1():

print("----test1-1----")

try:

print(num)

except:

print('test1  except......')

print("----test1-2----")

'''

def test2():

print("----test2-1----")

test1()

print("----test2-2----")

def test3():

try:

print("----test3-1----")

test1()

print("----test3-2----")

except Exception as result:

print("捕获到了异常,信息是:%s"%result)

print("----test3-2----")

test3()

#print("------华丽的分割线-----")

#test2()

相关文章

网友评论

      本文标题:python 文件及文件夹的操作和异常捕获

      本文链接:https://www.haomeiwen.com/subject/evcihxtx.html