Python文件处理

引言

应用程序运行过程中产生的数据最先都是存放于内存中的,若想永久保存下来,必须要保存于硬盘中。应用程序若想操作硬件必须通过操作系统,而文件就是操作系统提供给应用程序来操作硬盘的虚拟概念,用户或应用程序对文件的操作,就是向操作系统发起调用,然后由操作系统完成对硬盘的具体操作。

文件操作基本流程

基本流程

有了文件的概念,我们无需再去考虑操作硬盘的细节,只需要关注操作文件的流程:

# 1. 打开文件,由应用程序向操作系统发起系统调用open(...),操作系统打开该文件,对应一块硬盘空
#    间,并返回一个文件对象赋值给一个变量f
         f=open('a.txt','r',encoding='utf-8') #默认打开模式就为r

# 2. 调用文件对象下的读/写方法,会被操作系统转换为读/写硬盘的操作
         data=f.read()

# 3. 向操作系统发起关闭文件的请求,回收系统资源
         f.close()
资源回收与with上下文管理

打开一个文件包含两部分资源:应用程序的变量f和操作系统打开的文件。在操作完毕一个文件时,必须把与该文件的这两部分资源全部回收,回收方法为:

         f.close() #回收操作系统打开的文件资源
         del f #回收应用程序级的变量

其中del f一定要发生在f.close()之后,否则就会导致操作系统打开的文件无法关闭,白白占用资源, 而python自动的垃圾回收机制决定了我们无需考虑del f,这就要求我们,在操作完毕文件后,一定要记住f.close(),虽然我们如此强调,但是大多数读者还是会不由自主地忘记f.close(),考虑到这一点,python提供了with关键字来帮我们管理上下文:

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

# 2、可用用with同时打开多个文件,用逗号分隔开即可
         with open('a.txt','r') as read_f,open('b.txt','w') as write_f:  
             data = read_f.read()
             write_f.write(data)
指定操作文本文件的字符编码

f = open(…)是由操作系统打开文件,如果打开的是文本文件,会涉及到字符编码问题,如果没有为open指定编码,那么打开文本文件的默认编码很明显是操作系统说了算了,操作系统会用自己的默认编码去打开文件,在windows下是gbk,在linux下是utf-8。
若要保证不乱码,文件以什么方式存的,就要以什么方式打开。

         f = open('a.txt','r',encoding='utf-8')

文件处理- – – open()

设置操作模式
  • r:只读模式,在文件不存在时则报错,文件存在文件内指针直接跳到文件开头
  • w:写入模式,在文件不存在时会创建空文档,文件存在会清空文件,文件指针跑到文件开头
  • a:附加模式,在文件不存在时会创建空文档,文件存在会将文件指针直接移动到文件末尾
  • r+:读写模式,在平时工作中,我们只单纯使用r/w/a,要么只读,要么只写,一般不用可读可写的模式
         # 案例
         # 实现注册功能:
         name = input("username:").strip()
         password = input("password:").strip()
         # 追加写入账号密码
         with open('db.txt', 'a', encoding='utf-8') as f:
             tag = 0
             # 读取账号密码,校验是否已经注册
             with open('db.txt', 'r', encoding='utf-8') as file:
                for line in file:
                    n,p = line.strip().split(':')
                    if n == name:
                        print("用户名已存在")
                        tag = 1
             if tag == 0:
                 info = f"{name}:{password}\n"
                 f.write(info)
控制读写方式

使用open()函数读写文件时,有两种读写方式:文本模式和二进制模式

文本模式(默认)
  • 参数为’t’
  • 读写文件都是以字符串为单位
  • 操作对象必须为文本文件
  • 必须指定encoding参数
二进制模式
  • 参数为’b’
  • 读写文件都是以bytes为操作单位
  • 操作对象为所有文件
  • 不可以指定encoding参数
         # b: 读写都是以二进制位单位
         with open('1.mp4',mode='rb') as f:
             data=f.read()
             print(type(data)) # 输出结果为:<class 'bytes'>

         with open('a.txt',mode='wb') as f:
             msg="你好"
             res=msg.encode('utf-8') # res为bytes类型
             f.write(res) # 在b模式下写入文件的只能是bytes类型
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇