"""提示:代码中的内容均被注释,请参考,切勿照搬"""
1 #文件的打开和关闭
2 """
3 文件对象 = open("文件名","使用方式")4 rt:读取一个txt文件5 wt: 只写打开一个txt文件,(如果没有该文件则新建该文件)会覆盖原有内容6 at:打开一个txt文件,并从文件指针位置追加写内容(文件指针默认在末尾)7 文件操作错误属于:I/O异常8 通常的异常:9 try:10 f = open("a.txt","wt")11 except Exception as e:12 print(e)13 """
14 #文件的写操作
15 #函数: 文件对象.write(s)其中s是待写入文件的字符串{文件对象需要时可写入的对象}
16 """
17 try:18 fobj = open("anc.txt","wt") #wt:可写入操作方式/at为在原有的文件内容追加写入19 fobj.write(" more") #写函数20 fobj.close()21
22 except Exception as err:23 print(err)24
25 结果:anc文件保存至当前目录下,并写入“[换行]more”26 """
27 #案例:学生信息储存
28 """
29 name = "wanzi"30 gender = "男"31 age = 2332 try:33 f = open("students.txt","wt")34 while True:35 #s = Student(i)36 #if s:37 f.write("namegenderge")38 ans = input("continue(Y/y):")39 if ans != "Y" and ans != "y":40 break41 i = i+142 f.close()43
44 except Exception as e:45 print(e)46
47 """
48 #读文件操作 文件对象.read(n) //返回全部字符串或者n字节字符
49 """
50 def writeFile(): #写文件操作51 f = open("abc.txt","wt")52 f.write("Hello world I am Code_boy Mirror_") #三行数据(两个 )53 f.close()54
55 def readFile(): #读文件操作56 f = open("abc.txt","rt")57 sread = f.read() #文件内容读取 [如果read(n)有值,则读取n个字符,为空则读取全部]58 print(sread) #将读取的内容打印输出59 f.close()60
61 try:62 writeFile() #调用写文件函数,写入文件63 readFile() #调用读文件函数,读出(打印)文件内容64 except Exception as e:65 print(e)66
67 """"""
68 结果:69 Hello world70 I am Code_boy71 Mirror_72 """
73 #读文件操作 文件对象.readline() //返回一行字符串(读取连续的字符串,遇到 或文件末尾结束)
74 """
75 def writeFile():76 f = open("readline.txt","wt")77 f.write("Hello world")78 f.close()79
80 def readlineFile():81 f = open("readline.txt","rt")82 sreadline = f.readline() #读取readline文件(只读一行)83 print(sreadline,"len=",len(sreadline))84 sreadline = f.readline()85 print(sreadline, "len=", len(sreadline))86 sreadline = f.readline()87 print(sreadline, "len=", len(sreadline))88
89 f.close()90 try:91 writeFile()92 readlineFile()93 except Exception as e:94 print(e)95
96 结果:97 Hello #readline中的文件内容: Hello world 结合readline的功能,在读取一行的数据98 len= 6 # "Hello ’ >>>> 共计6个字节(换行是因为读取了 )99 world len= 5 #如上类说明100 len= 0 #文件指针已到达末尾,无法继续读出数据故 len = 0101
102 """
103 #.readline()可以使用循环的方式(判断是否读取为空)来读取全部,一般都是使用读单行内容
104 #但是! .readlines(){加了一个"s"}就可以直接读取全部数据:
105 """
106 def writeFile():107 f = open("readline.txt","wt")108 f.write("Hello world")109 f.close()110
111 def readlinesFile():112 f = open("readline.txt","rt")113 sreadlines = f.readlines() #读取readlines文件(读全部行)并以list形式返回114 #因为是以列表格式返回,所以一般情况下会配合循环(for)从readlines()提取每一行循环打印输出115 for i in range(len(sreadlines)): #1号:利用for输出116 print(sreadlines[i],end="")117
118 print(sreadlines) #读全部内容,并且每一行用" "(显示)隔开 #2号:直接输出119 f.close()120
121 try:122 writeFile()123 readlinesFile()124 except Exception as error:125 print(error)126
127 1号结果:128 Hello129 world130 2号结果:131 ["Hello ", "world"] #>>>也就是readlinese()读取数据的储存(list)形式132 """
133 #读取文件中的学生信息
134 """
135 f = open("student1.txt","rt")136 while True:137
138 name = f.readline().strip(" ")# *.strip()>>用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。139 if name == "":140 break141 gender = f.readline().strip(" ")142 age = f.readline().strip(" ")143 f.close()144 print(name,gender,age)145 """
146
147 #文件编码
148 """
149 #GBK编码:中文字符包含简体和繁体字符,每个字符仅能存储简体中文字符 汉字占二字节150 #*UTF-8编码:全球通用的编码(默认使用)汉字占三字节151 #文件打开时,可以指定用encoding参数指定编码例如:152 # f = open("x.txt","wt",encoding = "utf-8")153 # 文件编码直接决定了文件的空间大小154 """
155 #案例:UTF-8文件编码
156 """
157 def writeFile():158 f = open("utf.txt","wt",encoding = "utf-8")159 f.write("Hello I am 王宇阳")160 f.close()161
162 def readFile():163 f = open("utf.txt","rt",encoding="utf-8")164 sreadlines = f.readlines()165 for i in sreadlines:166 print(i)167 f.close()168 try:169 writeFile()170 readFile()171 except Exception as error:172 print(error)173
174 # 结果: Hello I am 王宇阳175 """
176
177 #文件指针(文件结束标志:EOF)...文件对象.tell()[返回一个整数,整数则是指针的位置]
178 """
179 f = open("zz.txt","wt",encoding="utf-8")180 print(f.tell()) #指针位置:0181 f.write("abcdef 你好")182 print(f.tell()) #指针位置:13183 f.close()184 f = open("zz.txt","rt",encoding="utf-8")185 f.tell() #文件指针归零186 s = f.read(3)187 print(s,f.tell()) #输出read读取内容并返回指针位置。读取大小和指针位置相符188 f.close()189 #结果:190 0191 13192 abc 3193 """
194 #操作指针...文件对象.seek(offset[,whence])
195 #offset:开始的偏移量,代表着需要偏移的字节数
196 #whence:[可选]默认值为"0’,给offset参数一个定义,表示从那个位置开始偏移,0:文件开头 1:文件当前位置 2:文件末尾
197 #----注意,只有 “rt+ wt+ at+” 的打开方式可以调整指针,其他的打开方式不支持指针操作
198 """
199 def writeFile():200 f = open("zz1.txt","wt+",encoding="utf-8")201 print(f.tell()) #返回初始指针位置 >>> 0202 f.write("123") #写入3字节内容203 print(f.tell()) #返回当前(写入文件后的)指针位置204 f.seek(2,0) #指针从开头位置偏移2字节即:1 2 . 3(点的位置)205 print(f.tell()) #返回指针位置>>>2206 f.write("abc") #从当前指针位置写入"abc’(覆盖了"3’)207 print(f.tell()) #返回指针位置>>>5208 f.close()209
210 def readFlie():211 f = open("zz1.txt","rt+",encoding="utf-8")212 r = f.read()213 print(r)214 f.close()215
216 writeFile()217 readFlie()218 #结果:219 0220 3221 2222 5223 12abc224 """
225 #二进制文件
226 #打开方式:rb wb ab rb+ wb+ ab+
227 """
228 实践中总结:229 1" list内容写入文件在需要专成str格式,应为列表格式文件不接受或者采用 (f.a) 的样式;(案例综合:教材管理95-101行)230 """