一、关于open模式
w 以写方式打开
w+ 以读写模式打开
wb 以二进制写模式打开
wb+ 以二进制读写模式打开
a 以追加模式打开
a+ 以读写模式打开
ab 以二进制追加模式打开
ab+ 以二进制读写模式打开
r 以只读方式打开
r+ 以读写方式打开
rb 以二进制读模式打开
rb+ 以二进制读写模式打开
二、功能详解
f.read([size]) #size为读取的长度,以byte为单位
f.readline([size]) #读一行,如果定义了size,有可能返回的只是一行的一部分
f.readlines([size]) #把文件每一行作为一个list的一个成员,并返回这个list。其实它的内部是通过循环调用readline()来实现的。如果提供size参数,size是表示读取内容的总长,也就是说可能只读到文件的一部分。
f.write(str) #把str写到文件中,write()并不会在str后加上一个换行符行后面加上任何东西。
f.writelines(seq) #把seq的内容全部写到文件中(多行一次性写入)。这个函数也只是忠实地写入,不会在每行后面加上任何东西。
f.close() #关闭文件。python会在一个文件不用后自动关闭文件,不过这一功能没有保证,最好还是养成自己关闭的习惯。如果一个文件在关闭后还对其进行操作会产生ValueError
f.flush() #把缓冲区的内容写入硬盘
f.tell() #返回文件操作标记的当前位置,以文件的开头为原点。
f.next() #返回下一行,并将文件操作标记位移到下一行。把一个file用于for...in file这样的语句时,就是调用next()函数来实现遍历的。
f.seek(offset) #将文件的操作标记移到offset的位置。
f.truncate([size]) #把文件裁成规定的大小,默认的是裁到当前文件操作标记的位置。
将注册的用户名和密码写入到一个文件中,然后通过读取此文件验证用户名跟密码是否正确
username = input('请输入你要注册的用户名:') password = input('请输入你要注册的密码:') with open('list_of_info',mode='w',encoding='utf-8') as f: f.write('{} {}'.format(username,password)) print('恭喜你,注册成功') lis = [] i = 0 while i < 3: uname = input('请输入你的用户名:') pwd = input('请输入你的密码:') with open('list_of_info',mode='r+',encoding='utf-8') as f1: for line in f1: lis.append(line) if uname == lis[0].strip() and pwd == lis[1].strip(): print('登录成功') break else: print('账号/密码错误') print(lis) i += 1
读:
read 一次性读
readlines 一次性读
readline 一行一行读(不知道在哪儿结束。视频 图片 rb bytes 按照字节读)
for 循环 ---最好!!!
#读取一个文件中的信息,进行内容的选择性替换 with open('用户信息表',encoding='utf-8') as f, open('用户信息表.bak','w',encoding='utf-8') as f2: for line in f: if '张三' in line: line = line.replace('张三','李四') f2.write(line) import os os.remove('用户信息表') os.rename('用户信息表.bak','用户信息表') # 用户信息表 # 学号:001 # 姓名:李四 # 年龄:18
#同事打开两个文件,把a复制到b中,读一行写一行,直到写完 with open('f1',encoding='utf-8') as a,open('f2','w',encoding='utf-8') as b: for line in a: b.write(line)