文件处理

一丶文件

  1.什么是文件

    文件是操作系统提供给用户/应用程序操作硬盘的一种虚拟的概念/接口
    用户/应用程序(open())
    操作系统(文件)
    计算机硬件(硬盘)

  2.为什么要有文件

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

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

  3.如何使用文件:

# 1.打开文件和文件路径的问题
# 由应用程序向操作系统发起系统调用open(...) f的值是一种变量,占用的是应用程序的内存空间
f = open(r'a.txt',mode='r')

# windows路径分隔符问题
# open('C:a.txt
bcd.txt')
# 解决方案一:推荐
# open(r'C:a.txt
bcd.txt')
# 解决方案二:
# open('C:/a.txt/nb/c/d.txt')


# 2.操作文件:读/写文件,应用程序对文件的读写请求都是在向操作系统发送系统调用,然后由操作系统控制硬盘把输入读入内存、或者写入硬盘
res=f.read()# 读取所有内容,执行完该操作后,文件指针会移动到文件末尾

# 3、关闭文件
f.close() # 回收操作系统资源
del f     # 回收应用程序资源
View Code

二丶文件的基本操作

  2.1 资源回收和with上下文管理

    在上文我们提到了文件的打开和关闭,而打开一个文件会有两部分资源:应用程序的变量f和操作

          系统打开的文件。在操作完毕时我们必须要回收,否则内存就会溢出,而回收方式就是上文提到的两个关闭,

    def f一定要跟在f.close()之后,但是python的回收机制让我们不用写def f,只写f.close()就行,

    但还是有人会忘记,所以就有了with这个管理方法。

# 1、在执行完子代码块后,with 会自动执行f.close()
with open('a.txt',mode='r') as f:
    pass

# 2、可用用with同时打开多个文件,用逗号分隔开即可
with open('a.txt','r') as read_f,open('b.txt','w') as write_f:
    pass

# 下面的代码和上面的意思一样    的存在只是为了让代码分行
with open('a.txt',mode='r') as f1,
        open('b.txt',mode='r') as f2:
     pass

  2.2 指定文本文件的字符编码:

    强调:t(文本)和b(二进制)不能单独使用,必须跟r/w/a连用

    在打开t(文本)文件时会有乱码问题,这就用到open()中一个重要的参数 :encoding=字符编码

    如果没有设置encoding那操作系统就会使用默认的编码格式  window为gbk  linux为utf-8  

    上节课我们也学到了用什么编码存 就用什么编码取

with open('c.txt',mode='rt',encoding='utf-8') as f:
    res=f.read() # t模式会将f.read()读出的结果解码成unicode

  2.3 以t模式为基准进行内存操作

    2.3.1 r模式的使用:

# r(默认的操作模式):只读模式,当文件不存在时报错,当文件存在时文件指针跳到开始位置
with open('c.txt',mode='rt',encoding='utf-8') as f:
    res=f.read() # 会将文件的内容由硬盘全部读入内存,赋值给res

练习:判断用户登入功能
inp_username = input('输入账号:')
inp_password = input('输入密码:')
with open('a.txt',mode='rt',encoding='UTF-8') as f:
    for line in f:
        username,password = line.strip().split(':')#
        if username == inp_username and password == inp_password:
            print('登入成功')
            break
    else:
        print('账号密码错误')

   

     2.3.2 w模式的使用:

# w:只写模式,当文件不存在时会创建空文件,当文件存在会清空文件,指针位于开始位置
# with open('d.txt',mode='wt',encoding='utf-8') as f:
    # f.read() # 报错,不可读
    # f.write('aaa
')

#强调:
# 1 在文件不关闭的情况下,连续的写入,后写的内容一定跟在前写内容的后面
with open('d.txt',mode='wt',encoding='utf-8') as f:
    f.write('a
')
    f.write('b
')
    f.write('c
')

# 2 如果重新以w模式打开文件,则会清空文件内容
with open('d.txt',mode='wt',encoding='utf-8') as f:
     f.write('a
')
with open('d.txt',mode='wt',encoding='utf-8') as f:
     f.write('b
')

# 案例:w模式用来创建全新的文件
# 文件文件的copy工具
src_file=input('源文件路径>>: ').strip()
dst_file=input('源文件路径>>: ').strip()
with open(r'{}'.format(src_file),mode='rt',encoding='utf-8') as f1,
    open(r'{}'.format(dst_file),mode='wt',encoding='utf-8') as f2:
    res=f1.read()
    f2.write(res)

    2.3.3 a模式的使用:

# a只追加写模式: 在文件不存在时会创建空文档,文件存在会将文件指针直接移动到文件末尾
with open('c.txt',mode='a',encoding='utf-8') as f:
#    f.read() # 报错,不能读
     f.write('sdfsd
')
     f.write('sdf
')
#强调 w 模式与 a 模式的异同:
# 1 相同点:在打开的文件不关闭的情况下,连续的写入,新写的内容总会跟在前写的内容之后
# 2 不同点:以 a 模式重新打开文件,不会清空原文件内容,会将文件指针直接移动到文件末尾,新写的内容永远写在最后

# 小练习:实现注册功能:
name=input('输入姓名: ').strip()
pwd=input('输入密码: ').strip()
with open('q.txt',mode='a',encoding='utf-8') as f:
    f.write('{}:{}
'.format(name,pwd))

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

    

    

    

原文地址:https://www.cnblogs.com/bk134/p/12487465.html