首页 > 其他分享 >文件操作、文件读写、及文件的诸多方法

文件操作、文件读写、及文件的诸多方法

时间:2022-10-09 21:46:05浏览次数:49  
标签:文件 encoding utf8 读写 诸多 print txt open

文件操作、文件读写、及文件的诸多方法

一、文件操作

1.文件的概念
   文件:就是操作系统暴露给用户操作硬盘的快捷方式
   打开文件,双击时就是从硬盘将数据加载到内存
   保存文件,就是将内存中的数据刷到硬盘保存
2.代码打开文件的两种方式
   方式1:
    f = open(文件路径,读写模式,encoding='utf8')
    f.close()
   方法2:
    with open(r'a.txt', 'r', encoding='utf8')
      with子代码
    ps:with上下文管理好处在于子代码运行结束自动调用close方法关闭资源
'''
为了解决文件路径跟一些字母组合在一起会产生特殊含义导致路径查找混乱问题,我们在字符串的路径前面加上字母r,就能解决这个问题
  C:\a.txt
  r'C:\a.txt'
with支持一次性打开多个文件
     with open() as f1, open() as f2, open() as f3:
         子代码
'''

二、文件读写模式

r   read   只读不写
w   write   只写不读
a   append   只追加,末尾追加
ps:
    1.with语法课支持一次性打开多个文件
    2.当写代码时,一些部分不知道写什么具体代码也不能空时,可以使用关键字pass或者...
      他们两个只补全语法不执行功能,本身没有任何的含义,尽量多使用pass
    3.英语单词后面有able,表示有什么能力
1.'r' 只读模式:只能读不能写
  读取文件的内容;
  with open(r'a.txt', 'r', encoding='utf8') as f:
    print(f.read())
2.'w' 只写模式:只能写不能看
  # 1.文件不存在时,自动创建
  with open(r'b.txt', 'w', encoding='utf8') as f:
     pass
  # 2.文件路径存在时,先清空原有的文件内容,之后再写入
   with open(r'a.txt', 'w', encoding='utf8') as f:
    f.write('摆脱拖延症啊啊啊\n')
    f.write('摆脱拖延症啊啊啊\n')
    f.write('摆脱拖延症啊啊啊\n')
 注:数据读取对比的时候一定注意换行符的存在
     换行符:\r\n  \n  \r
3.'a' 只追加模式:文件末尾添加数据
   # 1.文件不存在时,自动创建
    with open(r'c.txt', 'a', encoding='utf8') as f:
      pass
   # 2.文件路径存在:自动在末尾等待追加内容
    with open(r'a.txt', 'a', encoding='utf8') as f:
      f.write('比放七天假更难受的是上七天班')

三、文件操作模式

t  文本模式,默认模式
    r   rt
    w   wt
    a   at
1.t模式只能操作文本文件
2.该模式必须要指定encoding参数
3.该模式的读写都是以字符串为单位
eg:
    with open('a.txt') as f:
       print(f.write('啊啊啊'))  # 报错,提示没有写的能力
b  二进制模式(bytes模式)
没有默认模式,需要自己指定   rb   wb   ab
1.因为计算机值认识0和1,对计算机而言文件都是二进制类型
2.可以操作任意类型的文件
3.读写都是以bytes为单位
4.不需要指定encoding参数,因为已经是二进制模式了,不需要编码
 eg:
    with open(r'a.txt', 'rb') as f:
      print(f.read())  # b'\xe6\x91\x86\xe8\x84\xb1\xe6\x8b\x96\xe5\xbb\xb6\xe7\x97\x87\xe5\x95\x8a\xe5\x95\x8a\xe5\x95\x8a\xe6\x91\x86\xe8\x84\xb1\xe6\x8b\x96\xe5\xbb\xb6\xe7\x97\x87\xe5\x95\x8a\xe5\x95\x8a\xe5\x95\x8a\xe6\x91\x86\xe8\x84\xb1\xe6\x8b\x96\xe5\xbb\xb6\xe7\x97\x87\xe5\x95\x8a\xe5\x95\x8a\xe5\x95\x8a'
 eg:
    with open(r'a.txt', 'ab') as f:
    f.write('hello')   # 报错,提示只能用bytes类型

四、文件诸多方法

1.read() # 一次性读取文件,并且光标停留在问价末尾,继续读则为空
         # 当文件较多时,该方法还可能造成计算机内存溢出
         # 括号内可以填写数字,文本模式下,表示读取几个字符
 eg:
    with open(r'a.txt', 'r', encoding='utf8') as f:
      print(f.read())
2.for循环
  # 当文件过大时,超出自己的内存,不建议一次读取,一行一行的读取文件,避免内存溢出现象
3.readline()  # 一次读取一行内容
  eg:
    with open(r'a.txt', 'r', encoding='utf8') as f:
      print(f.readline())
4.readlines()  # 一次性读取文件内容,会按照行数组织成列表的一个个数据值
  eg:
    with open(r'a.txt', 'r', encoding='utf8') as f:
      print(f.readlines())
5.readable()  # 判断文件是否具备读数据的能力
  eg:
    with open(r'a.txt', 'r', encoding='utf8') as f:
      print(f.readable())
6.write()  # 写入数据
  eg:
    with open(r'a.txt', 'w', encoding='utf8') as f:
       f.write('今天不适合出名')
7.writeable()  # 判断文件是否具备读数据的能力 
   eg:
    with open(r'a.txt', 'w', encoding='utf8') as f:
      print(f.writeable())
8.writelines()  # 判断文件是否具备读数据的能力 
   eg:
    with open(r'a.txt', 'w', encoding='utf8') as f:
      f.writelines('今天适合学习')
9.flush()  # 将内存中文件数据立刻刷到硬盘 等价于ctrl + s
  eg:
    with open(r'a.txt', 'w', encoding='utf8') as f:
      f.writelines('今天适合学习')
      f.flush()   # 保存文件  

五、文件内光标的移动

我们读取文件时,光标会随着读取内容的解释移至内容的末尾,下面有几种方式使文件内的光标随着我们的指令移动:
1.我们在文本模式下读取文件内容时,括号内添加要读取的字符个数,主要换行符也是一个字节
   eg:
      with open(r'a.txt', 'r', encoding='utf8') as f:
           print(f.read(4))   # 今天不适
2.在二进制模式中read()读取内容时括号可添加读取个数,英文一个字节,汉字三个字节起步,   二进制中换行符算两个字节
  eg:
      with open(r'a.txt', 'rb') as f:
        data = f.read(15)
        print(data.decode())  # 今天不适合
      # 添加读取个数的时候,一定注意汉字三个字节起步,计算错是要报错的
3.tell()能够读取内容的字节数
  eg:
       with open(r'a.txt', 'rb') as f:
         data = f.read(15)
         print(data.decode())  # 今天不适合
         print(f.tell())       # 15
4.seek(offset,whence)
    offset是位移量,以字节为单位
    whence是模式,有0,1,2
    0是基于文件开头,文本和二进制都可以使用
    1是基于当前位置,只有二进制可以使用
    2是基于文件末尾,只有二进制模式才能使用
eg:
    with open(r'a.txt', 'rb') as f:
        print(f.read())
        f.seek(0,0)
        print(f.read())
        f.seek(0, 0)
        print(f.read())

六、拷贝方式

通过先读取再将读取的内容写入,(文件不存在时即创建新的文件)可实现文件的复制
# 只能拷贝文本文件
eg:
    with open(r'a.txt', 'r', encoding='utf8') as f:
       data = f.read()
    with open(r'b.txt', 'w', encoding='utf8') as f1:
       f1.write(data)
# 可拷贝任意文件
eg:
    with open(r'a.txt', 'rb') as f, open(r'b.txt', 'wb') as f1:
        data = f1.read()
        f1.write(data)   # 可以写成 f1.write(f.read())

七、作业

1.编写简易版本的拷贝工具
     自己输入想要拷贝的数据路径 自己输入拷贝到哪个地方的目标路径
     任何类型数据皆可拷贝
     ps:个别电脑C盘文件由于权限问题可能无法拷贝 换其他盘尝试即可
解答:
# 1.获取想要拷贝的文件路径
sources_file = input('请输入您要拷贝的目标文件路径>>>').strip()
# 2.获取目标文件的路径
target_file = input('请输入您要拷贝到的文件路径>>>').strip()
# 3.打开第一个文件路径,读取写入第二个文件路径中
with open(r'%s' % sources_file, 'rb') as f, open(r'%s' % target_file, 'wb') as f1:
    for line in f:
        f1.write(line)

image

2.利用文件充当数据库编写用户登录、注册功能
  文件名称:userinfo.txt
  基础要求:
  		 用户注册功能>>>:文件内添加用户数据(用户名、密码等)
       用户登录功能>>>:读取文件内用户数据做校验
      ps:上述功能只需要实现一次就算过关(单用户) 文件内始终就一个用户信息
  拔高要求:
       用户可以连续注册
      用户可以多账号切换登录(多用户)  文件内有多个用户信息
      ps:思考多用户数据情况下如何组织文件内数据结构较为简单
    提示:本质其实就是昨天作业的第二道题 只不过数据库由数据类型变成文件
单用户基础版登录与注册:
注册:
    # 1.获取用户的用户名和密码
    username = input('请输入您的用户名>>>').strip()
    pwd = input('请输入您的密码').strip()
    # 2.构造用户名和密码的组合
    data = f'{username}|{pwd}'
    # 3.打开文件写入数据
    with open(r'userinfo.txt', 'w', encoding='utf8') as f:
        f.write(data)
登录:
    # 1.获取用户名与密码
    username = input('请输入您的用户名>>>').strip()
    pwd = input('请输入您的密码').strip()
    # 2.读取文件内容
    with open(r'userinfo.txt', 'r', encoding='utf8') as f:
        real_name, real_pwd = f.read().split('|')  # 解压赋值,先读数据,然后切割,成列表
    # 3.校验用户名和密码
    if username == real_name and pwd == real_pwd:
        print('登录成功')
    else:
        print('用户名或者密码有错')
多用户升级版登录与注册:
while True:
    print('''
    1.注册功能    2.登录功能
    ''')
    choice = input('请输入您要执行的功能编号>>').strip()
    if choice == '1':
        username = input('请输入您的用户名》》').strip()
        pwd = input('请输入您的密码》》').strip()
        with open(r'userinfo.txt', 'r', encoding='utf8') as f:
            for line in f:
                real_name, real_pwd = line.split('|')
                if username == real_name:
                    print('用户名已存在,无法完成注册')
                    break
            else:
                with open(r'userinfo.txt', 'a', encoding='utf8') as f2:
                    f2.write(f'{username}|{pwd}\n')
                print(f'用户{username}注册成功')
    elif choice == '2':
        username = input('请输入您的用户名》》').strip()
        pwd = input('请输入您的密码》》').strip()
        with open(r'userinfo.txt', 'r', encoding='utf8') as f1:
            for line in f1:
                real_name, real_pwd = line.split('|')
                if username == real_name and pwd == real_pwd.strip('\n'):
                    print('登录成功')
                    break
            else:
                print('登录失败')
    else:
        print('没有该功能编号')

标签:文件,encoding,utf8,读写,诸多,print,txt,open
From: https://www.cnblogs.com/zx0524/p/16773796.html

相关文章

  • 文件相关知识点及函数基本知识点
    文件相关知识点及函数基本知识点目录文件相关知识点及函数基本知识点一、文件读写总概括二、计算机硬盘修改数据的原理(了解)三、文件内容修改(了解)四、函数简介五、函数语法......
  • 文件操作及函数基本知识
    文件操作利用python代码的编写来读写文件1.文件的概念就是操作系统暴露给用户操作硬盘的快捷方式eg:双击一个文件其实是从硬盘将数据加载到内存ctrl+s保存文件其实......
  • day9文件读写以及操作使用的诸多方法
    今日内容概要拔高作业讲解文件操作利用python代码的编写来读写文件1.文件的概念2.文件的操作方式3.文件读写模式4.文件操作模式5.文件诸多方法6.文件......
  • 文件光标与函数简介
    文件内光标移动文件内光标的移动是以bytes为单位移动的,t模式下的read()是以字符移动的文件内指针的移动不一定都是有读写操作被动的出发,可以通过移动的方法对......
  • @mysql数据库读写分离
    文章目录​​一、主库切换优先级​​​​1.数据量切换测试​​​​2.优先级切换测试​​​​3.如果断电或者断网,binlog如何保存?​​​​二、VIP漂移​​​​1.VIP漂移的两......
  • 文件操作
    今日内容文件操作1.文件的概念就是操作系统暴露给用户操作硬盘的快捷方式eg:双击一个文件其实就是从硬盘将数据加载到内存ctrl+s保存文件其实就是将内存......
  • 在 Linux 虚拟机上扩展根文件系统 扩容(azure cloud)
    文章目录​​linux文件系统扩展​​​​1.登录azurecloud​​​​2.进入服务器,查看当前的文件系统​​​​3.服务器关机(关机扩容)​​​​4.服务器上文件系统扩展调整​​li......
  • python文件操作
    python文件操作文件的概念文件就像是系统呈现在我们面前的能够使用硬盘的快捷方式,文件可以是文本文档、图片、程序等等。文件通常具有点+三个字母的文件扩展名,用于指示文......
  • 文件操作
    文件操作1.文件的概念 就是操作系统暴入给用户操作硬盘的快捷方式比如双击一个文件就是冲硬盘将数据加载到内存ctrl+s保存文件就是将内存的数据刷到硬盘保存......
  • 文件的修改与函数
    文件的修改计算机硬盘修改数据的原理硬盘有两个形态占有态和自由态我们在删除数据的时候,就是将原来的位置标记为自由态,在下载新数据落到这个自由态原本的标记位置就会......