1 ##以下是书本上的例子 2 #可以选择性观看 3 4 #先补充一个知识点 5 #open()函数 6 #open(file,mode='r',buffering=-1,encoding=None,newline=None,closefd=True,opener=None) 7 #1.file 文件,可以是字符串或者是数字,如果是字符串型的文件,文件名可以填写当前相对路径也可以填写绝对路径 8 # 但是如果文件名是一个整数,那就是指向的一个打开的文件 9 # 补充解释: 10 # 1.相对路径 11 # 表示在当前路径下,目标文件的位置,比如我是C盘Desktop文件夹中打开的程序 12 # C:UsersadminDesktopPythonD1 13 # 目标文件D1就不需要写全了,相对路径就只用写PythonD1 14 # 2.绝对路径 15 # 完全写全文件的位置 16 17 #2.mode 设置文件打开的模式 18 # r-只读 w-写入 x-独占创建模式(找不到文件会创建然后进行写入状态) 19 # a-追加模式(文件存在,追加到文件末尾) b-二进制模式 t-文本模式(默认)+-更新模式 20 21 #3.buffering 设置缓冲区参数,默认值为-1,表示让系统来自动分派,如果填0就是关闭缓冲区 22 # 数据直接写入文件,一般只在二进制文件中使用 23 24 #4.encoding 表示用来打开文件时的文件编码 errors 表示抛出异常时怎么处理 25 # 26 #5.newline 用来设置换行模式 27 # 28 #6.closefd opener 这两个参数是在file为文件描述符时使用(就是file时整数) 29 # closefd为True时,文件调用close()方法关闭,同时也会关闭描述符对应的文件 30 # closefd为False时,文件对象调用close()方法关闭文件,但不会关闭文件描述符所对应的文件 31 # opener用于打开文件时执行一些操作,opener参数执行一个函数,该函数返还一个文件描述符 32 33 #我们现在使用中,只管一个file就可以了 34 # 35 # 36 37 def read_date_form_file(filename): 38 try: 39 file=open(filename) 40 in_date=file.read() 41 in_date=in_date.strip() 42 date=dt.datetime.strptime(in_date,"%Y-%m-%d") 43 return date 44 except ValueError as e: 45 print("处理ValueError异常") 46 print(e) 47 except FileNotFoundError as e: 48 #没有找到文件 49 print("处理FileNotFoundError异常") 50 print(e) 51 except OSError as e: 52 #输入输出异常 53 print("处理OSError异常") 54 print(e) 55 56 date_1=read_date_form_file('date_source.txt') 57 print("日期={0}",format(date_1)) 58 #抛出错误处理FileNotFoundError异常 59 #表示没有找到文件 60 61 #date_1=read_date_form_file('C:/Users/admin/source/repos/Rush_B/Rush_B/yichang/date_source.txt') 62 #注意,这里调用文件填写路径的时候 63 #要把所有的转化成/,因为如果填写的是那么系统会将其当作转义字符 64 #会比较麻烦 65 #print("日期={0}",format(date_1)) 66 #AttributeError: 'builtin_function_or_method' object has no attribute 'strip' 67 #结果报错了 68 #他表示不认识上面的 strip方法 表示没有在类中找到这个方法 69 #通过查询,我们发现这个方法是使用在str类型上面的 70 71 string="516 545 999 " 72 print(string) 73 #这里现在的数据是有转义符的 74 #我们通过strip()方进行修改 75 #可以去除字符串头和尾的空格和转义符 76 string=string.strip() 77 print(string) 78 #这里我们看到虽然中间的转义符都执行了 79 #但是末尾的转义符却被删除了 80 #在strip的()内,我们可以写入数据来表示 81 #删除末尾和开头的这个数据 82 string=string.strip('5') 83 print(string) 84 #这样开头的5就被删除了 85 #我们也可以通过在strip前面添加字母来表示删除前还是后 86 string=string.lstrip('1') #删除前面的1 87 string=string.rstrip('9') #删除后面的9 88 print(string) 89 #关于str.strip()的讨论暂时结束了 90 #回到之前的话题来 91 92 #找到了错误的原因了 93 #前面在调用read方法的时候忘记加上()了 94 date_1=read_date_form_file('C:/Users/admin/source/repos/Rush_B/Rush_B/yichang/date_source.txt') 95 print("日期={0}",format(date_1)) 96 #这样我们就完成了数据的调用 97 98 #那么我们对FileNotFoundError的异常测试一下 99 date_2=read_date_form_file('C:/Users/admin/source/repos/Rush_B/Rush_B/yichang/fakething.txt') 100 print("日期={0}",format(date_2)) 101 #[Errno 2] No such file or directory: 'C:/Users/admin/source/repos/Rush_B/Rush_B/yichang/fakething.txt' 102 #表示可以正常运行except的内容 103 104 #我们再调换一下OSError和FileNotFoundError 105 def read_date_form_file_2(filename): 106 try: 107 file=open(filename) 108 in_date=file.read() 109 in_date=in_date.strip() 110 date=dt.datetime.strptime(in_date,"%Y-%m-%d") 111 return date 112 except ValueError as e: 113 print("处理ValueError异常") 114 print(e) 115 116 except OSError as e: 117 #输入输出异常 118 print("处理OSError异常") 119 print(e) 120 121 except FileNotFoundError as e: 122 #没有找到文件 123 print("处理FileNotFoundError异常") 124 print(e) 125 126 date_3=read_date_form_file_2('C:/Users/admin/source/repos/Rush_B/Rush_B/yichang/fake.txt') 127 print("日期={0}",format(date_3)) 128 #我们发现,上面的例子报出错误是 FileNotFoundError 129 #这里爆出的错误是 OSError 130 #但是本质反应的错误是一样的,原因是OSError是FileNotFoundError的父类 131 132 #补充我的file是内容就是2000-10-25 133 #存放位置也就是和当前这个Py文件放在的一起