文件对象 = open('文件名','使用方式') rt:读取一个txt文件 wt: 只写打开一个txt文件,(如果没有该文件则新建该文件)会覆盖原有内容 at:打开一个txt文件,并从文件指针位置追加写内容(文件指针默认在末尾) 文件操作错误属于:I/O异常 通常的异常:
1 try:
2 f = open('a.txt','wt')
3 except Exception as e:
4 print(e)
#文件的写操作 # 函数: 文件对象.write(s)其中s是待写入文件的字符串{文件对象需要时可写入的对象}
1 try:
2 fobj = open('anc.txt','wt') #wt:可写入操作方式/at为在原有的文件内容追加写入
3 fobj.write('\nmore') #写函数
4 fobj.close()
5
6 except Exception as err:
7 print(err)
8
9 #结果:anc文件保存至当前目录下,并写入“[换行]more”
#案例:学生信息储存
1 name = 'wanzi'
2 gender = '男'
3 age = 23
4 try:
5 f = open('students.txt','wt')
6 while True:
7 #s = Student(i)
8 #if s:
9 f.write("namegenderge")
10 ans = input("continue(Y/y):")
11 if ans != 'Y' and ans != 'y':
12 break
13 i = i+1
14 f.close()
15
16 except Exception as e:
17 print(e)
#读文件操作 文件对象.read(n) //返回全部字符串或者n字节字符
1 def writeFile(): #写文件操作
2 f = open('abc.txt','wt')
3 f.write("Hello world\nI am Code_boy\nMirror_") #三行数据(两个\n)
4 f.close()
5
6 def readFile(): #读文件操作
7 f = open('abc.txt','rt')
8 sread = f.read() #文件内容读取 [如果read(n)有值,则读取n个字符,为空则读取全部]
9 print(sread) #将读取的内容打印输出
10 f.close()
11
12 try:
13 writeFile() #调用写文件函数,写入文件
14 readFile() #调用读文件函数,读出(打印)文件内容
15 except Exception as e:
16 print(e)
17
18 '''
19 结果:
20 Hello world
21 I am Code_boy
22 Mirror_
23 '''
#读文件操作 文件对象.readline() //返回一行字符串(读取连续的字符串,遇到\n或文件末尾结束)
1 def writeFile():
2 f = open('readline.txt','wt')
3 f.write('Hello\nworld')
4 f.close()
5
6 def readlineFile():
7 f = open('readline.txt','rt')
8 sreadline = f.readline() #读取readline文件(只读一行)
9 print(sreadline,'len=',len(sreadline))
10 sreadline = f.readline()
11 print(sreadline, 'len=', len(sreadline))
12 sreadline = f.readline()
13 print(sreadline, 'len=', len(sreadline))
14
15 f.close()
16 try:
17 writeFile()
18 readlineFile()
19 except Exception as e:
20 print(e)
21
22 结果:
23 Hello #readline中的文件内容: Hello\nworld 结合readline的功能,在读取一行的数据
24 len= 6 # ‘Hello\n’ >>>> 共计6个字节(换行是因为读取了\n)
25 world len= 5 #如上类说明
26 len= 0 #文件指针已到达末尾,无法继续读出数据故 len = 0
# .readline()可以使用循环的方式(判断是否读取为空)来读取全部,一般都是使用读单行内容 #但是! .readlines(){加了一个‘s'}就可以直接读取全部数据:
1 def writeFile():
2 f = open('readline.txt','wt')
3 f.write('Hello\nworld')
4 f.close()
5
6 def readlinesFile():
7 f = open('readline.txt','rt')
8 sreadlines = f.readlines() #读取readlines文件(读全部行)并以list形式返回
9 #因为是以列表格式返回,所以一般情况下会配合循环(for)从readlines()提取每一行循环打印输出
10 for i in range(len(sreadlines)): #1号:利用for输出
11 print(sreadlines[i],end='')
12
13 print(sreadlines) #读全部内容,并且每一行用'\n'(显示)隔开 #2号:直接输出
14 f.close()
15
16 try:
17 writeFile()
18 readlinesFile()
19 except Exception as error:
20 print(error)
21 '''
22 1号结果:
23 Hello
24 world
25 2号结果:
26 ['Hello\n', 'world'] #>>>也就是readlinese()读取数据的储存(list)形式
27 '''
#读取文件中的学生信息
1 f = open('student1.txt','rt')
2 while True:
3
4 name = f.readline().strip('\n')# *.strip()>>用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。
5 if name == '':
6 break
7 gender = f.readline().strip('\n')
8 age = f.readline().strip('\n')
9 f.close()
10 print(name,gender,age)
#文件编码 #GBK编码:中文字符包含简体和繁体字符,每个字符仅能存储简体中文字符 汉字占二字节 #*UTF-8编码:全球通用的编码(默认使用)汉字占三字节 #文件打开时,可以指定用encoding参数指定编码例如: # f = open('x.txt','wt',encoding = 'utf-8') # 文件编码直接决定了文件的空间大小
#案例:UTF-8文件编码
1 def writeFile():
2 f = open('utf.txt','wt',encoding = 'utf-8')
3 f.write('Hello I am 王宇阳')
4 f.close()
5
6 def readFile():
7 f = open('utf.txt','rt',encoding='utf-8')
8 sreadlines = f.readlines()
9 for i in sreadlines:
10 print(i)
11 f.close()
12 try:
13 writeFile()
14 readFile()
15 except Exception as error:
16 print(error)
17
18 # 结果: Hello I am 王宇阳
#文件指针(文件结束标志:EOF)...文件对象.tell()[返回一个整数,整数则是指针的位置]
1 f = open('zz.txt','wt',encoding='utf-8')
2 print(f.tell()) #指针位置:0
3 f.write('abcdef 你好')
4 print(f.tell()) #指针位置:13
5 f.close()
6 f = open('zz.txt','rt',encoding='utf-8')
7 f.tell() #文件指针归零
8 s = f.read(3)
9 print(s,f.tell()) #输出read读取内容并返回指针位置。读取大小和指针位置相符
10 f.close()
11 #结果:
12 0
13 13
14 abc 3
#操作指针...文件对象.seek(offset[,whence]) # offset:开始的偏移量,代表着需要偏移的字节数 # whence:[可选]默认值为‘0’,给offset参数一个定义,表示从那个位置开始偏移,0:文件开头 1:文件当前位置 2:文件末尾 #----注意,只有 “rt+ wt+ at+” 的打开方式可以调整指针,其他的打开方式不支持指针操作
1 def writeFile():
2 f = open('zz1.txt','wt+',encoding='utf-8')
3 print(f.tell()) #返回初始指针位置 >>> 0
4 f.write('123') #写入3字节内容
5 print(f.tell()) #返回当前(写入文件后的)指针位置
6 f.seek(2,0) #指针从开头位置偏移2字节即:1 2 . 3(点的位置)
7 print(f.tell()) #返回指针位置>>>2
8 f.write('abc') #从当前指针位置写入‘abc’(覆盖了‘3’)
9 print(f.tell()) #返回指针位置>>>5
10 f.close()
1 def readFlie():
2 f = open('zz1.txt','rt+',encoding='utf-8')
3 r = f.read()
4 print(r)
5 f.close()
6
7 writeFile()
8 readFlie()
9 #结果:
10 0
11 3
12 2
13 5
14 12abc
15 '''
#二进制文件 #打开方式:rb wb ab rb+ wb+ ab+ ''' 实践中总结: 1' list内容写入文件在需要专成str格式,应为列表格式文件不接受或者采用 (f.a) 的样式;(案例综合:教材管理95-101行)