Python文件操作基础流程解析


Posted in Python onMarch 19, 2020

一.文件操作的流程

1、打开文件

open('C:\a.txt\nb\c\d.txt')

解决方案一:推荐

open(r'C:\a.txt\nb\c\d.txt')

解决方案二:

open('C:/a.txt/nb/c/d.txt')

f=open(r'aaa/a.txt',mode='rt') # f的值是一种变量,占用的是应用程序的内存空间

2、操作文件:

读/写文件,应用程序对文件的读写请求都是在向操作系统发送系统调用,然后由操作系统控制硬盘把输入读入内存、或者写入硬盘

res=f.read()

3、关闭文件

f.close() # 回收操作系统资源

f.read() # 变量f存在,但是不能再读了

二.资源管理与with上下文管理

打开一个文件包含两个部分资源:应用程序的变量f和操作系统打开的文件。

在操作完一个文件后必须把这两部分的资源回收

通常回收有两种方法:

1 f.close()#回收操作系统打开的文件资源

2 del f # 回收应用程序资源

其中,del f 一定要发生在f.close()之后,否则就会导致操作系统打开的文件无法关闭,。

python的垃圾回收机制让我们无序考虑del f,所以我们必须记住,操作完毕后一定要fclose(),

但是我们都是比较懒或者比较健忘的,所以python就有with关键字来帮助我们管理上下文。

1. with open('a.txt',mode='rt') as f1:# f1=open('a.txt',mode='rt')

   pass

2. with open('a.txt',mode='rt') as f1,\

open('b.txt',mode='rt') as f2:

res1=f1.read()

res2=f2.read()

print(res1)

三.文件的操作模式

文件的读写操作的模式有

  • r(默认):只读
  • w:只写
  • a:只追加写

文件的读写内容的模式有

t 文本模式:1.读写文件都是以字符串为单位

  2.只能针对文本文件

  3.必须制定encoding参数

b 二进制模式:1.读写文件都是以bytes为单位的

 2.可以针对所有文件

 3.一定不能制定encoding参数 

强调:t和b不能单独使用,必须跟r/w/a连用

各模式的参考案例

1、r(默认的操作模式):

只读模式,当文件不存在时报错,当文件存在时文件指针跳到开始位置

with open('c.txt',mode='rt',encoding='utf-8') as f:
   print('第一次读'.center(50,'*'))
   res=f.read() # 把所有内容从硬盘读入内存
   print(res)
 with open('c.txt', mode='rt', encoding='utf-8') as f:
   print('第二次读'.center(50,'*'))
   res1=f.read()
   print(res1)

实现用户认证功能

inp_username=input('your name>>: ').strip()
 inp_password=input('your password>>: ').strip()
 with open('user.txt',mode='rt',encoding='utf-8') as f:
   for line in f:
     # print(line,end='') # egon:123\n
     username,password=line.strip().split(':') #压缩赋值,取出文件中的用户名密码
     if inp_username == username and inp_password == password:
       print('login successfull')
       break
   else:
     print('账号或密码错误')

应用程序====》文件

应用程序====》数据库管理软件=====》文件

2、w:只写模式,当文件不存在时会创建空文件,当文件存在会清空文件,指针位于开始位置

with open('d.txt',mode='wt',encoding='utf-8') as f:
# f.read() # 报错,不可读
# f.write('擦勒\n') 
# 强调1:
# 在以w模式打开文件没有关闭的情况下,连续写入,新的内容总是跟在旧的之后
# with open('d.txt',mode='wt',encoding='utf-8') as f:
# f.write('擦勒1\n')
# f.write('擦勒2\n')
# f.write('擦勒3\n')
# 强调2:
# 如果重新以w模式打开文件,则会清空文件内容
# with open('d.txt',mode='wt',encoding='utf-8') as f:
# f.write('擦勒1\n')
# with open('d.txt',mode='wt',encoding='utf-8') as f:
# f.write('擦勒2\n')
# with open('d.txt',mode='wt',encoding='utf-8') as f:
# f.write('擦勒3\n')

案例: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)

3、a:只追加写,在文件不存在时会创建空文档,在文件存在时文件指针会直接调到末尾

with open('e.txt',mode='at',encoding='utf-8') as f:
   # f.read() # 报错,不能读
   f.write('1\n')
   f.write('2\n')
   f.write('3\n')

强调 w 模式与 a 模式的异同:

1 相同点:在打开的文件不关闭的情况下,连续的写入,新写的内容总会跟在前写的内容之后

2 不同点:以 a 模式重新打开文件,不会清空原文件内容,会将文件指针直接移动到文件末尾,新写的内容永远写在最后

案例:a模式用来在原有的文件内存的基础之上写入新的内容,比如记录日志、注册

注册功能

name=input('your name>>: ')
 pwd=input('your name>>: ')
 with open('db.txt',mode='at',encoding='utf-8') as f:
   f.write('{}:{}\n'.format(name,pwd))

了解:+不能单独使用,必须配合r、w、a

r+,w+,a+:可读可写

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python使用7z解压软件备份文件脚本分享
Feb 21 Python
在Python的Django框架下使用django-tagging的教程
May 30 Python
Python中return语句用法实例分析
Aug 04 Python
Python工程师面试题 与Python基础语法相关
Jan 14 Python
详解Python中使用base64模块来处理base64编码的方法
Jul 01 Python
python xml解析实例详解
Nov 14 Python
Python给你的头像加上圣诞帽
Jan 04 Python
Flask web开发处理POST请求实现(登录案例)
Jul 26 Python
python修改文件内容的3种方法详解
Nov 15 Python
python实现二分类的卡方分箱示例
Nov 22 Python
Python sep参数使用方法详解
Feb 12 Python
Python日志处理模块logging用法解析
May 19 Python
Python函数基本使用原理详解
Mar 19 #Python
Python ATM功能实现代码实例
Mar 19 #Python
详解django使用include无法跳转的解决方法
Mar 19 #Python
Django模板标签中url使用详解(url跳转到指定页面)
Mar 19 #Python
关于Python turtle库使用时坐标的确定方法
Mar 19 #Python
Windows下Pycharm远程连接虚拟机中Centos下的Python环境(图文教程详解)
Mar 19 #Python
Pycharm内置终端及远程SSH工具的使用教程图文详解
Mar 19 #Python
You might like
PHP操作mysql函数详解,mysql和php交互函数
2011/05/19 PHP
php多种形式发送邮件(mail qmail邮件系统 phpmailer类)
2014/01/22 PHP
php实现天干地支计算器示例
2014/03/14 PHP
PHP中读取文件的8种方法和代码实例
2014/08/05 PHP
PHP中如何防止外部恶意提交调用ajax接口
2016/04/11 PHP
laravel框架使用FormRequest进行表单验证,验证异常返回JSON操作示例
2020/02/18 PHP
音乐播放用的的几个函数
2006/09/07 Javascript
兼容所有浏览器的js复制插件Zero使用介绍
2014/03/19 Javascript
node.js中的http.response.setHeader方法使用说明
2014/12/14 Javascript
基于jquery的手风琴图片展示效果实现方法
2014/12/16 Javascript
JavaScript DOM基础
2015/04/13 Javascript
jQuery表单事件实例代码分享
2016/08/18 Javascript
Extjs gridpanel 中的checkbox(复选框)根据某行的条件不能选中的解决方法
2017/02/17 Javascript
Vue.js项目部署到服务器的详细步骤
2017/07/17 Javascript
Angular.js项目中使用gulp实现自动化构建以及压缩打包详解
2017/07/19 Javascript
vue表单绑定实现多选框和下拉列表的实例
2017/08/12 Javascript
动态加载权限管理模块中的Vue组件
2018/01/16 Javascript
微信小程序实现收藏与取消收藏切换图片功能
2018/08/03 Javascript
Angular中innerHTML标签的样式不起作用的原因解析
2019/06/18 Javascript
深入理解基于vue-cli的webpack打包优化实践及探索
2019/10/14 Javascript
[03:36]DOTA2完美大师赛coL战队趣味视频——我演你猜
2017/11/23 DOTA
[37:50]VP vs TNC Supermajor小组赛B组 BO3 第一场 6.2
2018/06/03 DOTA
python利用正则表达式提取字符串
2016/12/08 Python
Python数字图像处理之霍夫线变换实现详解
2018/01/12 Python
scrapy爬虫完整实例
2018/01/25 Python
解决已经安装requests,却依然提示No module named requests问题
2018/05/18 Python
Pycharm导入Python包,模块的图文教程
2018/06/13 Python
对IPython交互模式下的退出方法详解
2019/02/16 Python
Django 导出项目依赖库到 requirements.txt过程解析
2019/08/23 Python
解决python明明pip安装成功却找不到包的问题
2019/08/28 Python
flask框架自定义url转换器操作详解
2020/01/25 Python
彼得罗夫美国官网:Peter Thomas Roth美国(青瓜面膜)
2017/11/05 全球购物
瑞典轮胎在线:Tirendo.se
2018/06/21 全球购物
数据库面试要点基本概念
2013/10/31 面试题
如何将无状态会话Bean发布为WEB服务,只有无状态会话Bean可以发布为WEB服务?
2015/12/03 面试题
MySQL中的引号和反引号的区别与用法详解
2021/10/24 MySQL