文件处理

Posted bk134

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文件处理相关的知识,希望对你有一定的参考价值。

一丶文件

  1.什么是文件

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

  2.为什么要有文件

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

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

  3.如何使用文件:

技术图片
# 1.打开文件和文件路径的问题
# 由应用程序向操作系统发起系统调用open(...) f的值是一种变量,占用的是应用程序的内存空间
f = open(ra.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,要么只读,要么只写,一般不用可读可写的模式

    

    

    

 

以上是关于文件处理的主要内容,如果未能解决你的问题,请参考以下文章

常用python日期日志获取内容循环的代码片段

处理屏幕旋转上的片段重复(带有示例代码)

在 Python 多处理进程中运行较慢的 OpenCV 代码片段

你如何在 python 中处理 graphql 查询和片段?

如何有效地打开 30gb 的文件并处理其中的片段而不减慢速度?

是否有在单个活动中处理多个片段的 Android 设计模式?