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中使用全局日志时需要注意的问题
May 06 Python
windows上安装Anaconda和python的教程详解
Mar 28 Python
python+opencv实现动态物体追踪
Jan 09 Python
Python日期时间模块datetime详解与Python 日期时间的比较,计算实例代码
Sep 14 Python
Python中的CSV文件使用"with"语句的方式详解
Oct 16 Python
python训练数据时打乱训练数据与标签的两种方法小结
Nov 08 Python
Python实现SQL注入检测插件实例代码
Feb 02 Python
python日期与时间戳的各种转换示例
Feb 12 Python
Django调用支付宝接口代码实例详解
Apr 04 Python
django模型类中,null=True,blank=True用法说明
Jul 09 Python
对Pytorch 中的contiguous理解说明
Mar 03 Python
python使用shell脚本创建kafka连接器
Apr 29 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
c#中的实现php中的preg_replace
2009/12/21 PHP
php 上传功能实例代码
2010/04/13 PHP
UCenter中的一个可逆加密函数authcode函数代码
2010/07/20 PHP
php使用pdo连接sqlite3的配置示例
2016/05/27 PHP
PHP常用的三种设计模式
2017/02/17 PHP
Thinkphp页面跳转设置跳转等待时间的操作
2019/10/16 PHP
PHP实现简单日历类编写
2020/08/28 PHP
你真的了解JavaScript吗?
2007/02/24 Javascript
javascript实现的动态添加表单元素input,button等(appendChild)
2007/11/24 Javascript
jquery监控数据是否变化(修正版)
2011/04/12 Javascript
基于jQuery Ajax实现上传文件
2016/03/24 Javascript
jQuery之简单的表单验证实例
2016/07/07 Javascript
Javascript中判断一个值是否为undefined的方法详解
2016/09/28 Javascript
angularjs实现首页轮播图效果
2017/04/14 Javascript
javascript编写简易计算器
2017/05/06 Javascript
深入理解vue2.0路由如何配置问题
2017/07/18 Javascript
微信小程序之滚动视图容器的实现方法
2017/09/26 Javascript
详解webpack打包后如何调试的方法步骤
2018/11/07 Javascript
详解JavaScript 新语法之Class 的私有属性与私有方法
2019/04/23 Javascript
nodejs中实现用户注册路由功能
2019/05/20 NodeJs
React中获取数据的3种方法及优缺点
2020/02/18 Javascript
在vue中实现echarts随窗体变化
2020/07/27 Javascript
[52:09]2014 DOTA2华西杯精英邀请赛 5 25 NewBee VS DK第二场
2014/05/26 DOTA
[02:42]DOTA2城市挑战赛收官在即 四强之争风起云涌
2018/06/05 DOTA
Python简单实现的代理服务器端口映射功能示例
2018/04/08 Python
python 实现GUI(图形用户界面)编程详解
2019/07/17 Python
解决Pytorch 训练与测试时爆显存(out of memory)的问题
2019/08/20 Python
200行python代码实现贪吃蛇游戏
2020/04/24 Python
用Python实现童年贪吃蛇小游戏功能的实例代码
2020/12/07 Python
Python结合百度语音识别实现实时翻译软件的实现
2021/01/18 Python
CSS3 Pie工具推荐--让IE6-8支持一些优秀的CSS3特性
2014/09/02 HTML / CSS
Wolford法国官网:奥地利奢侈内衣品牌
2020/08/11 全球购物
党员目标管理责任书
2014/07/25 职场文书
幼儿园感恩节活动方案
2014/10/06 职场文书
vue如何在data中引入图片的正确路径
2022/06/05 Vue.js
浅谈为什么我的 z-index 又不生效了
2022/07/15 HTML / CSS