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 Web框架Flask下网站开发入门实例
Feb 08 Python
Python文件操作之合并文本文件内容示例代码
Sep 19 Python
Zookeeper接口kazoo实例解析
Jan 22 Python
PyQt5实现下载进度条效果
Apr 19 Python
基于python3实现socket文件传输和校验
Jul 28 Python
10 行 Python 代码教你自动发送短信(不想回复工作邮件妙招)
Oct 11 Python
pytorch 更改预训练模型网络结构的方法
Aug 19 Python
深入了解python中元类的相关知识
Aug 29 Python
为什么说Python可以实现所有的算法
Oct 04 Python
python实现UDP协议下的文件传输
Mar 20 Python
python报错: 'list' object has no attribute 'shape'的解决
Jul 15 Python
解决PyCharm不在run输出运行结果而不是再Console里输出的问题
Sep 21 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代码 用PHP写出自己的BLOG系统
2010/04/12 PHP
PHP JSON格式数据交互实例代码详解
2011/01/13 PHP
php中防止恶意刷新页面的代码小结
2012/10/31 PHP
PHP数字前补0的自带函数sprintf 和number_format的用法(详解)
2017/02/06 PHP
详解yii2使用多个数据库的案例
2017/06/16 PHP
jquery $.ajax()取xml数据的小问题解决方法
2010/11/20 Javascript
js改变文章字体大小的实例代码
2013/11/27 Javascript
JQuery实现鼠标移动到图片上显示边框效果
2014/01/09 Javascript
判断某个字符在一个字符串中是否存在的js代码
2014/02/28 Javascript
JavaScript+html5 canvas绘制缤纷多彩的三角形效果完整实例
2016/01/26 Javascript
浅谈javascript中遇到的字符串对象处理
2016/11/18 Javascript
探究JavaScript中的五种事件处理程序方式
2016/12/07 Javascript
JavaScript实现倒计时跳转页面功能【实用】
2016/12/13 Javascript
jquery做个日期选择适用于手机端示例
2017/01/10 Javascript
Chrome调试折腾记之JS断点调试技巧
2017/09/11 Javascript
jfinal与bootstrap的登出实战详解
2017/11/27 Javascript
vue使用axios实现文件上传进度的实时更新详解
2017/12/20 Javascript
vue2.0 实现导航守卫(路由守卫)
2018/05/21 Javascript
vue项目每30秒刷新1次接口的实现方法
2018/12/04 Javascript
深入理解Vue.js轻量高效的前端组件化方案
2018/12/10 Javascript
JS函数动态传递参数的方法分析【基于arguments对象】
2019/06/05 Javascript
Vue this.$router.push(参数)实现页面跳转操作
2020/09/09 Javascript
python实时分析日志的一个小脚本分享
2017/05/07 Python
如何用itertools解决无序排列组合的问题
2017/05/18 Python
学习Python3 Dlib19.7进行人脸面部识别
2018/01/24 Python
Windows下将Python文件打包成.EXE可执行文件的方法
2018/08/03 Python
介绍一款python类型检查工具pyright(推荐)
2019/07/03 Python
python判断无向图环是否存在的示例
2019/11/22 Python
Tensorflow读取并输出已保存模型的权重数值方式
2020/01/04 Python
HTML5实现锚点时请使用id取代name
2013/09/06 HTML / CSS
HTML5 video 视频标签使用介绍
2014/02/03 HTML / CSS
Halston Heritage官网:简洁的日装,稍显奢华的晚装
2018/11/20 全球购物
蔬菜基地的创业计划书
2014/01/06 职场文书
党员承诺书格式范文
2015/04/28 职场文书
中国梦党课学习心得体会
2016/01/05 职场文书
详解解Django 多对多表关系的三种创建方式
2021/08/23 Python