11--文件操作之文本文件

总结小视频参见,欢迎来踩踩( •̀ ω •́ )y-----https://www.bilibili.com/video/av96067116

一、文件

  1、什么是文件

    文件是操作系统提供给用户/应用程序操作硬盘的一种功能/概念/接口

  2、为什么要用文件

    用户/应用程序可以通过文件将数据永久保存到硬盘中,即操作文件就是操作硬盘   

    用户/应用程序直接操作的是文件,对文件进行的所有操作都是在向操作系统发送系统调用,然后由操作系统将其转换成具体的硬盘操作。

 二、如何对文件进行操作---t模式,即只针对文本文件的操作

  1、文件操作的基本流程

    1/1 打开文件,open()

#注意:打开文件时的文件路径问题
#
open('C:\a\ab\') \在python中具有特殊意义 # 可以采取两种方式解决 # rawstring,原生字符串 open(r'C:\a\ab\') # 右斜杠变左斜杠 f = open('1.txt') # f是一个变量名,对应的值占用的是应用程序的内存空间 print(f)

    1/2 操作文件(读/写)

# 应用程序对文件的读写请求都是在向操作系统发送系统调用,然后由操作系统控制硬盘把文件读入内存或者写入硬盘
f = open('1.txt',mode='rt')
res = f.read()
print(res)

    1/3 关闭文件(close())

# 关闭文件,先关文件,后删除内存空间,如果先删除内存空间,关闭文件时会报错哦

# f.close  回收占用操作系统的空间
# 变量f存在,但是不能执行读文件的操作
# def f    回收内存空间,垃圾回收机制。。。不需要考虑

  2、with--上下文管理

# 文件对象又称为文件句柄:
# with 在子代码块执行结束后会自动调用f.close
with open('1.txt',mode = 'rt') as f:
    res = f.read()
    print(res)

# 可以同时打开几个文件,\可以换行
with open('1.txt',mode = 'rt') as f,\
        open('2.txt',mode = 'rt') as f1:
    res = f.read()
    res1= f1.read()
    print(res)
    print(res1)

  3、指定字符编码

# t文本模式---你需要知道的知识
#       默认都是以字符串就是以(Unicode编码)为单位
#       文本文件,不是图片和视频文件。。。。
#       必须为Open指定参数
# open()默认以操作系统的编码格式打开文件,Linux,mac--utf-8,Windows--gbk
with open('1.txt',mode='rt',encoding='utf-8') as f:
    res = f.read()  # 默认读出来的1.txt就是utf-8,但是t模式会将读出的结果解码成Unicode,
    print(res)
    print(type(res))
    f.write('我要吃饭')

# 如果没有t模式,在存文本文件的时候需要自己编码,读的时候需要自己解码
# 硬盘: 1.txt在硬盘上是utf-8的二进制格式,因为1.txt以utf-8编码格式存的
# 内存:读到内存就是 1.txt在硬盘上是utf-8的二进制格式--解码--由于t模式存在,字符串必须转为Unicode

  4、文件操作模式详解

    1. r,默认的操作模式,只读模式

# r只读模式: 在文件不存在时则报错,文件存在文件内指针直接跳到文件开头
 with open('a.txt',mode='r',encoding='utf-8') as f:
     res=f.read() # 会将文件的内容由硬盘全部读入内存,赋值给res

with open('1.txt',mode = 'rt',encoding='utf-8') as f:
# read不指定参数,指针直接跳到最后,整个文件都从硬盘读到读到内存
print('第一次读'.center(50,'#'))
res = f.read()
print(res)
# 此时光标在文件最后所以继续读是没有值的,read从指针当前位置开始读
print('第2次读'.center(50, '#'))
res = f.read()
print(res)
# 小练习:实现用户认证功能
 inp_name=input('请输入你的名字: ').strip()
 inp_pwd=input('请输入你的密码: ').strip()
 with open(r'db.txt',mode='r',encoding='utf-8') as f:
     for line in f:
         # 把用户输入的名字与密码与读出内容做比对
         u,p=line.strip('\n').split(':')
         if inp_name == u and inp_pwd == p:
             print('登录成功')
             break
     else:
         print('账号名或者密码错误')

    2. w只写模式,只能写不能读,比如可以进行文件复制操作

# w只写模式: 在文件不存在时会创建空文档,文件存在会清空文件,文件指针跑到文件开头
with open('b.txt',mode='w',encoding='utf-8') as f:
    f.write('你好\n')
    f.write('我好\n') 
    f.write('大家好\n')
    f.write('111\n222\n333\n')
#强调:
# 1 在文件不关闭的情况下,连续的写入,后写的内容一定跟在前写内容的后面
# 2 如果重新以w模式打开文件,则会清空文件内容
# 只能写不能读
with open('4.txt',mode='wt',encoding='utf-8') as f: f.write('haha\n') # f.read() 报错不可读 f.write('哈哈')
# 案列,w模式用来创建全新的文件
# 文本文件的copy
src = input('源文件路径:')
tsg = input('复制文件路径:')
with open(r'{}'.format(src),mode='rt',encoding='utf-8') as f,\
        open('{}'.format('tsg'),mode='wt',encoding='utf-8') as f1:
    res = f.read()
    f1.write(res)

    3、a 只追加模式,在文件不存在时,会创建一个新的文件,指针在最开始;文件存在时,指针会直接跳到文件末尾,比如注册功能和写日志

with open('5.txt',mode='at',encoding='utf-8') as f:
    # f.read()  不能读,报错
    f.write('tank')
# 小练习:实现注册功能:
 name=input('username>>>: ').strip()
 pwd=input('password>>>: ').strip()
 with open('db1.txt',mode='a',encoding='utf-8') as f:
     info='%s:%s\n' %(name,pwd)
     f.write(info)
强调:w模式和a模式的异同
# 1 相同点:在打开的文件不关闭的情况下,连续的写入,新写的内容总会跟在前写的内容之后
# 2 不同点:以 a 模式重新打开文件,不会清空原文件内容,会将文件指针直接移动到文件末尾,新写的内容永远写在最后

    5. + 模式的了解

# r+ w+ a+ :可读可写
#在平时工作中,我们只单纯使用r/w/a,要么只读,要么只写,一般不用可读可写的模式

 

posted @ 2020-03-13 16:13  微信搜索-程序媛小庄  阅读(215)  评论(0编辑  收藏  举报