读文件
1 ''' 2 概述:python内置了读写文件的函数,用法和C是兼容的,在磁盘上读写文件的功能 3 是由操作系统提供的。读写文件的操作就是请求操作系统打开一个文件对象, 4 然后通过值操作系统提供的接口从这个已经打开的文件中提取数据(读文件), 5 或者把数据写入到这个文件中(写文件)。 6 ''' 7 # 读文件 8 ''' 9 1、打开文件 10 2、读取内容 11 3、关闭文件 12 ''' 13 ''' 14 1、打开文件 15 ''' 16 ''' 17 语法格式:open(path, mode [,encoding][,errors]) 18 解释: 19 path:文件路径 20 文件路径: 21 相对路径 : 1-读文件.py 22 绝对路径 : C:\\Users\\xlg\\Desktop\\Day14\\文件操作\\1-读文件.py 23 mode:文件的打开方式 24 r :以只读的方式打开文件,文件描述符放在文件的开头位置 25 rb : 以二进制格式打开文件,文件只读,文件描述符放在文件的 26 开头位置 27 r+:以读写的方式打开文件,文件描述符放在文件的开头位置 28 w:以只写的方式打开文件,如果文件存在,那么覆盖该文件, 29 如果文件不存在,则会创建文件。 30 wb:以二进制格式打开文件,文件用于写入,如果文件存在, 31 那么覆盖该文件,如果文件不存在,则会创建文件。 32 w+:以读写的方式打开文件 33 a:打开一个文件用于追加写入,如果文件不存在,则会创建文件; 34 如果文件存在,则会在文件末尾写入内容。 35 a+:以读写的方式打开文件 36 encoding:文件的编码格式 37 如果有该参数,文件的编码格式是什么,这里赋值同样的编码格式。 38 errors:错误处理 39 strict:默认方式,如果遇到非法字符,抛出异常 40 ignore:忽略非法字符 41 replace:用?代替非法字符 42 43 open函数:返回值:文件描述符 44 注:当文件不存在时,抛出异常:FileNotFoundError 45 ''' 46 # PermissionError : 权限错误 当文件在C盘下有可能会报错 47 # 将文件放到E或F等盘下。 48 49 # 1.1、打开普通文件 50 # 相对路径 51 f1 = open("readFile.txt", mode="r") 52 print(f1) 53 # 绝对路径 54 f2 = open("C:\\Users\\xlg\\Desktop\\read.txt", mode="r") 55 print(f2) 56 57 # 设置编码格式 58 f3 = open("readFile.txt","r", encoding="utf-8") 59 print(f3) 60 f4 = open("C:\\Users\\xlg\\Desktop\\read.txt", mode="r", encoding="utf-8") 61 print(f4) 62 # UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb5 in positon 0: 63 64 # 1.2、以二进制形式打开文件 65 # 注:不能设置encoding 66 # ValueError: binary mode doesn't take an encoding argument 67 f5 = open("readFile.txt", "rb") 68 print(f5) 69 70 # 1.3、指定错误处理方式 71 f6 = open("readFile.txt", "r", encoding="utf-8", errors="ignore") 72 print(f6) 73 74 # 1.4、当文件不存在,以读的方式打开文件会返回错误 75 # FileNotFoundError: [Errno 2] No such file or directory: 'qwe.txt' 76 # f7 = open("qwe.txt", "r", encoding="utf-8") 77 # print(f7) 78 print('------------------------------------------') 79 ''' 80 2、读取文件 81 ''' 82 f3 = open("readFile.txt","r", encoding="utf-8") 83 # 2.1、read([size]) : 会返回读取的内容,记录光标位置,光标位置自动 84 # 向后移动 85 # (1)、read()读取文件中所有的内容 86 # str1 = f3.read() 87 # print(str1) 88 print('-----------------------------') 89 # (2)、read(size) : 读取size个字符并返回 90 # str2 = f3.read(3) 91 # print(str2) 92 # str3 = f3.read(4) 93 # print(str3) 94 95 # 2.2、readlines([size]) 96 # (1)、readlines() 读取所有行,将每行的内容放到一个列表中返回 97 # str4 = f3.readlines() 98 # print(str4) 99 # (2)、readlines(size) 当size的值大于0时,实际返回的字符数可能会大于size, 100 # 原因:readlines本事是整行读取,如果涉及到新的一行的内容时,系统 101 # 是由缓存区的,将该行整行的内容返回。 102 # str5 = f3.readlines(15) 103 # print(str5) 104 105 # 2.3、readline([size]) 106 #(1)、readline() 读取整行 107 # str6 = f3.readline() 108 # print(str6) 109 # str7 = f3.readline() 110 # print(str7) 111 # (2)、readline(size) 读取size个字符并返回 112 # str8 = f3.readline(3) 113 # print(str8) 114 115 # 3、修改描述符的位置:seek(offset) # 以0开始 116 # 4、返回描述符的位置:tell() 117 print(f3.tell()) 118 # f3.read(4) 119 f3.seek(8) 120 print(f3.tell()) 121 print(f3.read(3)) 122 123 ''' 124 3、关闭文件 125 ''' 126 # 文件使用完毕后必须关闭,因为文件会占用操作系统的资源, 127 # 操作系统在同一时间打开的文件数是有限的。 128 # 注:已经关闭的文件不能再继续使用。 129 #语法格式:close() 130 f3.close() 131 132 # ValueError: I/O operation on closed file. 133 # print(f3.read(3)) 134 135 136 # 完整过程 137 # 解释:因为文件读写都有可能会出现IOError异常, 138 # 当异常出现时,文件的close的操作是不能再执行的,所以, 139 # 为了保证无论是否出错,都能正确的关闭文件,使用finally来实现。 140 ''' 141 try: 142 f4 = open("readFile.txt","r", encoding="utf-8") 143 print(f4.read(4)) 144 except FileNotFoundError as e: 145 print("文件不存在") 146 finally: 147 if f4: 148 f4.close() 149 ''' 150 151 # 简洁的方式 152 #解释:with和上面的try的效果是一样的,但是代码相对简洁, 153 # 而且不必我们自己调用close(), 系统会自动执行close() 154 with open("readFile.txt","r", encoding="utf-8") as f1: 155 print(f1.read(6))