文件简单操作
文件读写模式
a 只追加模式(尾部追加)
路径不存在会自动创建新的文件
with open(r'b.txt','a',encoding='utf8') as f:
f.write('hello\nMr')
f.write('hello\nMr')
f.write('hello\nMr')
#.write()括号内增加数据就可以把数据添加到目标文件内打印出来的都在同一行,如果要变行需要\n,写入的内容会在尾部追加
路径存在会在文件尾部追加

文件
1.操作文件
.read() # 一次性读取文件内所有内容
.readline() # 每次只读文件一行内容
.readlines # 读取文件所有的内容,组织成列表,每个元素是文件的每行内容
.readable() # 判断当前文件是否具备读的能力
1.读取文件
with open(r'b.txt','a',encoding='utf8') as f:
.wrint() #()内容直接写入到文本内容,写入的内容必须是字符串类型
.weitlines() # 可以将列表中多个字符串元素全部写入
.wrtable() # 判断文件是否拥有可读的能力
.flush # 直接将内存中的文件数据刷到硬盘中,相当于ctrl+s\
2.文件优化操作
with open(r'b.txt','a',encoding='utf8') as f:
1.一次性读完之后 光标停留在了文件末尾 无法再次读取内容
2.该方法在读取大文件的时候 可能会造成内存溢出的情况
解决上述问题的策略就是逐行读取文件内容
# for i in f: # 文件变量名f支持for循环 相当于一行行读取文件内容
# 以后涉及到多行文件内容的情况一般都是采用for循环读取'''
3.文件操作模式
t 文本模式
1.默认模式
r w a >>> rt wt at
2.该模式所有操作都是以字符串为基本单位(文本)
3.该模式必须要有指定的encoding参数
b 二进制模式
1.该模式可以操作任意类型的文件
2.该模式所有的操作都是以bytes类型(二进制)基本单位
3.该模式不需要指定encoding参数
rb wb ab
with open(r'b.txt','rb') as f:
print(f.read)
b'\xe4\xbd\xa0\xe5\xa5\xbd\r\n\xe4\xbd\xa0\xe5\xa5\xbd\r\n1\xe4\xbd\xa0\xe5\xa5\xbd\xe5\x91\xa2\r\nhello2hello\r\nMr3hello\r\nMr4hello\r\nMr1\xe4\xbd\xa0\xe5\xa5\xbd\xe5\x91\xa2\r\nhello2hello\r\nMr3hello\r\nMr4hello\r\nMr1\xe5\x91\xa2\r\nhello2hello\r\nMr3hello\r\nMr4hello\r\nMr1\r\nhello2hello\r\nMr3hello\r\nMr4hello\r\nMr1hello2helloMr3helloMr4helloMr'
#显示的为b>>>bytes类型,中文三个字节为一个基本单位
#读取来的内容
with open(r'b.txt','ab') as f:
f.write('')
#这样括号内写不是二进制类型会报错
#b模式要写内容到文件需要二进制类型。
with open(r'b.txt','rb') as f:
f.write(''.encode('utf8'))
#将要写入的内容更改为二进制类型,储存到文件后会转化为写入的内容

练习
拷贝
用户简单注册
while True:
print("""
请选择功能;
1.用户注册
2.用户登录
""")
suerinput = input('请输入:').strip()
if suerinput == '1':
# 1.获取用户输入
name = input('请输入用户名:').strip()
password = input('请输入密码:').strip()
# 1.1将用户输入的内容两条数据做成一条
information = '{}|{}\n'.format(name, password)
# 2.判断用户输入的用户名是否重复、需要将文件里面的数据取出来
with open(r'作业练习.txt','r',encoding='utf8') as l1:
# 2.1循环取出里面每一条数据
for i in l1:
# 2.2因为取出来的是一个字符串,要将里面的数据变成列表,在比对用户名
name1,password2 = i.split('|')
# 2.3做成列表之后比对用户输入的用户名存不存在文件中
if name == name1:
# 2.4如果重复就告知用户
print('用户名重复,请重新输入!')
# 2.5告知过后结束这个for循环
break
# 当for循环不是自然结束后面的else不会执行
else:
# 1.2创建一个文件保存数据
with open(r'作业练习.txt','a',encoding='utf8') as practice:
#1.3 将得到一条字符串通过AB模式写入到新建的文件夹只能够
practice.write(information)
# 1.4告知用户创建成功
print('用户{}创建成功'.format(name))
elif suerinput == '2':
# 需要结束此循环
count = True
while count:
# 3.获取用户输入
My_name = input('请输入登录姓名;').strip()
My_password = input('请输入密码:').strip()
#3.1 取出文件夹内的数据
with open(r'作业练习.txt','r', encoding='utf8') as l2:
# 3.2将文件夹里面的数据进行循环取出
for l3 in l2 :
# 3.3从字符串变成列表然后取出名字密码对比
uer_name,uer_passwold = l3.split('|')
#3.4 如果账号密码都正确就会告知登录成功,并结束
if uer_name == My_name and uer_passwold.strip('\n') == My_password:
print('登录成功')
# 3.5如果程序走到这里就会把while的循环变成False,结束循环
count = False
else:
#密码错误则会告知用户,并重新循环
print('账号或者密码错误,请重新输入 ')

浙公网安备 33010602011771号