第六章 文件的操作方法(二)

文件操作方法

1.读系列
with open(r'a.txt', 'a' , encoding='utf8') as f:
    # print(f.read())  # 一次行读取文件内容
    # print(f.readline())  # 每次只读一行文件
    # print(f.readlines())  #读取文件所有的内容组织成列表 
   print(f.readable())  # 校验当前文件是否具备读的能力
2.写系列
with open(r'a.txt', 'w' , encoding='utf8') as f:
    # f.write('克服一切困难')  # 往文件内写入文本内容
    # f.write(123)  # 写入内容必须是字符串类型
    # f.writelines(['maby', 'hello', 'fu*k'])  # 可以将列表中的多个字符串元素全部拼接在一起
    # print(f.writable())  # True
    # print(f.readabel())  # False
    # f.flush() # 直接将内存文件数据刷到硬盘 等于文本ctrl+s

 	

文件优化操作

image

with open(r'a.txt', 'a' , encoding='utf8') as f:
    print(f.read())  # 一次性读取文件内所有的内容
    
    """
    1.一次性读完之后  光标停留在了文件末尾  无法再次读取内容
    2.该方法在读取大文件的时候  可能会造成内存溢出的情况
    """
    
        """
    for line in f:  # 文件变量名f支持for循环  相当于一行行读取文件的内容
        line
        
        以后涉及多行文件内容的情况一般都是采用for循环读取
    """

文件操作模式

t	文本模式
	1.默认的模式
    	r w a >>> rt wt at
    2.该模式只能操作字符串(文本)
    3.该模式必需要指定encoding参数
    4.该模式所有操作都是以字符串基本单位(文本)

b	二进制模式
	1.该模式可以操作任意类型文件
    2.该模式所有操作都是以bytes类型(二进制)基本单位
    3.该模式不需要指定encoding参数
    	rb wb ab

二进制读写操作

with open(r'a.txt', 'rb') as f:
    print(f.read(3).decode('utf8'))

with open(r'a.txt', 'r', encoding='utf8') as f:
    print(f.read(3))

with open(r'a.txt', 'wb') as f:
    f.write('123'.encode('utf8'))

"""

read()  括号内可以放数字
    在t模式下表示字符个数
    在b模式下表示字节个数
  英文字符统一使用bytes来表示
"""

文件内光标移动

with open(r'a.txt', 'r', encoding='utf8') as f:
    print(f.read())
    f.seek(2, 0)
    print(f.read())
with open(r'a.txt', 'rb', ) as f:
    print(f.read())
    f.seek(-3, 1)
    print(f.read())

"""
控制文件内光标的移动 f.seek()
f.seek(offset,whence)
    offset 表示位移量
        始终是以字节为最小单位
        正数从左往右
        负数从右往左
    whence表示模式
    0:以文件开头为参考系
    1:只支持b模式,以当前位置为参考系
    2:只支持b模式,以文件末尾为参考系
    
"""

了解下文件的替换操作

# 如何将文件中的内容1修改为2
# 方式一 覆盖    缺点:麻烦
# with open(r'a.txt', 'r', encoding='utf8') as f:
#     data = f.read()
#     print(type(data))
# with open(r'c.txt', 'w', encoding='utf8') as f1:
#     new_data = data.replace('1', '2')
#     f1.write(new_data)

# 方式二 新建   缺点:同时存在两个文件
# import os
# with open('a.txt', mode='rt', encoding='utf-8') as read_f,\
#     open('a.txt.swap', mode='wt', encoding='utf-8') as write_f:
#     for line in read_f:
#         write_f.write(line.replace('SB', 'usb'))
# os.remove('a.txt')  # 删除原文件
# os.rename('a.txt.swap', 'a.txt')  # 重命名文件

补充:练习!

image

1.注册登录

# 写一个注册登录表
# while True:
#     print("""
#     1.用户注册
#     2.用户登录
#     """)
#     choice = input('请输入你的选择(q结束选择):').strip()
#     if choice == 'q':
#         print('结束')
#         break
#     elif choice == '1':
#          # 1.获取用户用户名和密码
#         user_name = input('请输入需要注册的用户名:').strip()
#         user_pass = input('请输入注册用户的密码:').strip()
#          # 2.1.判断用户名是否已存在
#         user_info = '%s|%s\n' % (user_name, user_pass)
#         with open(r'D:\pyt.hc\day09文件\a.txt', 'r', encoding='utf8') as f1:
#           # 2.2.循环读取每一行用户数据
#             for line in f1:
#             # 2.3.获取每一行数据中的用户名
#                 username, pwd = line.split('|')
#                # 2.4.判断用户名是否一致
#                 if user_name == username:
#                     print('用户已存在')
#                     break
#             else:
#                # 3.文件操作 写入数据
#                 with open(r'D:\pyt.hc\day09文件\a.txt', 'a', encoding='utf8') as f:
#                     f.write(user_info)
#                 print('用户%s注册成功' % user_name)
#     elif choice == '2':
#      # 1.获取用户名和密码(先使用input获取用户输入的数据 然后strip()移除首尾空格 之后赋值给变量名username)
#         user_login = input('输入需要登录的用户账号:').strip()
#         pass_login = input('输入需要登录的用户的密码:').strip()
#       # 2.获取文件内真实的用户数据
#         with open(r'D:\pyt.hc\day09文件\a.txt', 'r', encoding='utf8') as f:
#             for line in f:
#             3.切割字符串获取真实的用户名和密码
            '''注意密码末尾有\n'''
#                 username, pwd = line.split('|')
#                # 4.比对用户名和密码是否正确
#                 if user_login == username and pass_login == pwd.strip('\n'):
#                     print('sucess')
#                     break
#             else:
#                 print('false')
#     else:
#         print('暂未开放次功能')

一个简易的拷贝工具(支持所有的文件类型)

# with open(input('请输入需要复制文件:').strip(), 'rb') as f:  # 获取用户输入的文件地址,获取用户想要储存新文件的地址
#             用二进制的方式打开需要复制的文件
#     path = f.read()  # 将文件读取出来的内容赋值给copy_file
# with open(input('请输入需要拷贝到哪个目录:').strip(), 'wb') as f1:  # 获取用户想要储存新文件的地址,用二进制的方式打开需要拷贝的文件,
#     f1.write(path)  # 将copy_file的内容写入到打开的拷贝文件中

posted @ 2021-11-11 20:07  hai起奈  阅读(46)  评论(0编辑  收藏  举报