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))