文件修改与函数

目录

  • 作业解析

  • 文件操作补充

  • 光标移动

  • 文件修改

  • 函数

 

 

练习一

1.利用文件操作编写一个简易的文件拷贝系统
让用户输入需要拷贝的文件路径
然后再获取即将拷贝到哪儿的路径
# 1.获取文件路径
source_file_path = input('source_path>>>:').strip()
# 2.在获取目标地址路径
target_file_path = input('target_path>>>:').strip()
# 3.打开源文件读取内容
# 4.创建新文件并写入内容
with open(r'%s' % source_file_path, 'rb') as read_f, open(r'%s' % target_file_path, 'wb') as write_f:
    # 循环读取文件内容避免出现内存溢出的情况
    for line in read_f:
        write_f.write(line)
View Code

 

 

 

 

 

练习二

2.利用文件操作完成用户的注册 登录
    基本要求
    用户注册获取用户名和密码然后写入文件   
    登录获取用户名和密码之后去文件中比对
    # 上述操作完成一次就算成功
while True:
    print("""
    1.注册
    2.登录
    """)
    choice = input('请选择想要执行的功能>>>:').strip()
    if choice == '1':
        # 注册功能
        # 1.获取用户用户名和密码
        username = input('username>>>:').strip()
        password = input('password>>>:').strip()
        # 2.打开文件直接写入
        with open(r'aaa.txt', 'w', encoding='utf8') as f:
            f.write('%s|%s' % (username, password))
        print('%s注册成功' % username)
    elif choice == '2':
        # 登录功能
        # 1.获取用户用户名和密码
        username = input('username>>>:').strip()
        password = input('password>>>:').strip()
        # 2.读取文件内容比对用户名和密码是否正确
        with open(r'aaa.txt', 'r', encoding='utf8') as f:
            # 由于目前文件内容就一行 可以直接使用read方法
            data = f.read()  # ben|123
            # 切割字符串 获取正确的用户名和密码
            real_name, real_pwd = data.split('|')
            # 先切割字符串得到一个列表['ben','123'] 在解压赋值给两个变量real_name real_pwd
            # 比对信息是否正确
            if real_name == username and real_pwd == password:
                print('登录成功')
            else:
                print('用户名或密码错误')
    else:
        print('输入不合法 暂时没有该功能')
View Code

 

 

 

 

 

练习三

#拔高练习
        用户注册可以多次注册并且校验用户名是否重复
        登录需要逐行比对
# 1.获取用户名和密码
flag = True
while flag:
    username = input('username>>>:').strip()
    password = input('password>>>:').strip()
    # 2.先读取文件内容  校验用户名是否重复
    with open(r'aaa.txt', 'r', encoding='utf8') as f:
        # 循环读取每一行用户数据
        for line in f:  # 'jason|123'  'kevin|123'
            # 解析出用户名
            real_name = line.split("|")[0]
            # 判断用户名是否重复
            if real_name == username:
                print('用户名已存在')
                # for也可以结合break和continue作用与while一致
                # 结束整个注册功能
                flag = False
    if flag:
        # 如果for循环正常执行完毕没有被break 说明用户名没有冲突
        with open(r'aaa.txt', 'a', encoding='utf8') as f:
            f.write('%s|%s\n' % (username, password))
        print('%s注册成功' % username)

# 登录
# 1.获取用户名和密码
username = input('username>>>:').strip()
password = input('password>>>:').strip()
# 2.读取文件内容 循环获取一行行用户数据
with open(r'aaa.txt', 'r', encoding='utf8') as f:
    for line in f:
        real_name, real_pwd = line.split("|")
        if username == real_name and password == real_pwd.strip('\n'):
            print('登录成功')
            break
    else:  # for循环没有被break打断的情况下正常执行完毕之后就会执行else
        print('用户名或密码错误')
View Code

 

 

文件操作补充

# 方法补充
with open(r'aaa.txt','a',encoding='utf8') as f:
    print(f.readable())  # True
    print(f.writable())  # False
    f.writelines(['ben','111','222'])
"""
1.flush()
    将内存中的数据立刻刷到硬盘 相当于ctrl+s
2.readable() writeable()
    判断文件是否可读可写
3.writelines()
    括号内放列表 多个元素都会被依次写入
"""

 

 

 

 

 

 

 

光标移动

# 文件光标移动 及 文件修改
"""
seek方法可以控制光标的移动
    seek(offset,whence)
        offset用来控制移动的位数
        whence是操作模式
            0:既可以用在文本模式也可以用在二进制模式
                文件开头
            1:只可以在二进制模式下使用
                当前位置
            2:只可以在二进制模式下使用
                文件末尾
"""
with open(r'a.txt', 'r', encoding='utf8') as f:
     data = f.read()
     print(data)
#     # 控制光标移动
     f.seek(1, 0)  # 移动到文件开头并往后再移动一个字符
     print(f.read())
View Code

 

 

 

 

 

with open(r'a.txt', 'rb') as f:
     data = f.read(4)
     print(data.decode('utf8'))
     f.seek(-6, 2)  # 二进制模式下移动的是字节数
     print(f.read().decode('utf8'))
View Code

 

 

文件修改

# 文件修改
 with open(r'a.txt','r',encoding='utf8') as f:
     data = f.read()
 with open(r'a.txt','w',encoding='utf8') as f:
     f.write(data.replace('jason','tony'))

 

 

 

# 创建一个新文件 将老文件内容写入新文件 过程中完成修改
之后将老文件删除 将新文件命名成老文件 从而达到修改的效果


import os
with open(r'a.txt','r',encoding='utf8') as f,open(r'a.txt.backend','w',encoding='utf8') as f1:
    for line in f:
        f1.write(line.replace('tony','jason'))
os.remove(r'a.txt')
os.rename(r'a.txt.backend',r'a.txt')

 

 

 

 

函数

#函数
就相当于是工具
提前定义好后续可以反复使用,避免了代码冗余的情况
        
  
#函数的语法结构
    def 函数名(参数1,参数2):
        '''函数的注释'''
        函数体代码
        return 函数的返回值

"""
1.def
    定义函数的关键字
2.函数名
    函数名的命名与变量名保持一致 见名知意
3.参数
    函数在使用之前还可以接收外部传入的参数
4.函数的注释
    类似于产品说明书
5.函数体代码
    整个函数主要功能逻辑 是整个函数的核心
6.return
    执行完函数之后可以给调用者一个反馈结果
"""  

#函数的基本使用
函数的使用一定要先定义后使用

 

posted @ 2021-08-17 15:46  陌若安然  阅读(92)  评论(0)    收藏  举报