首页 > 其他分享 >文件操作的基本流程

文件操作的基本流程

时间:2023-12-05 15:48:01浏览次数:36  
标签:文件 打开 utf 流程 write 操作 txt open

文件操作的基本流程

1. 基本流程

  • 有了文件的概念,我们无需再去考虑操作硬盘的细节,只需要关注操作文件的流程
# 1. 打开文件,由应用程序向操作系统发起系统调用open(...),操作系统打开该文件,对应一块硬盘空间,并返回一个文件对象赋值给一个变量f
f=open('a.txt','r',encoding='utf-8') #默认打开模式就为r

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

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

2. 资源回收与 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)

3. 指定操作文本文件的字符编码

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

4.文件的操作模式

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

4.1 r 模式的使用

# r只读模式: 在文件不存在时则报错,文件存在文件内指针直接跳到文件开头
 with open('a.txt',mode='r',encoding='utf-8') as f:
     res=f.read() # 会将文件的内容由硬盘全部读入内存,赋值给res

# 小练习:实现用户认证功能
 inp_name=input('请输入你的名字: ').strip()
 inp_pwd=input('请输入你的密码: ').strip()
 with open(r'db.txt',mode='r',encoding='utf-8') as f:
     for line in f:
         # 把用户输入的名字与密码与读出内容做比对
         u,p=line.strip('\n').split(':')
         if inp_name == u and inp_pwd == p:
             print('登录成功')
             break
     else:
         print('账号名或者密码错误')      
  • 当路径中可能存在有转移的字符时,字符串前面加上r来解决转义的问题
r'D:\a.txt'

4.2 w 模式的使用

  • w只写模式: 在文件不存在时会创建空文档,文件存在会清空文件,文件指针跑到文件开头
with open('b.txt',mode='w',encoding='utf-8') as f:
    f.write('你好\n')
    f.write('我好\n') 
    f.write('大家好\n')
    f.write('111\n222\n333\n')
  • 强调
    • 在文件不关闭的情况下,连续的写入,后写的内容一定跟在前写内容的后面
    • 如果重新以w模式打开文件,则会清空文件内容

4.3 a 模式的应用

  • a只追加写模式: 在文件不存在时会创建空文档,文件存在会将文件指针直接移动到文件末尾
with open('c.txt',mode='a',encoding='utf-8') as f:
     f.write('44444\n')
     f.write('55555\n')
    
# 小练习:实现注册功能:
 name=input('username>>>: ').strip()
 pwd=input('password>>>: ').strip()
 with open('db1.txt',mode='a',encoding='utf-8') as f:
     info='%s:%s\n' %(name,pwd)
     f.write(info)
  • 强调 w 模式与 a 模式的异同
    • 相同点:在打开的文件不关闭的情况下,连续的写入,新写的内容总会跟在前写的内容之后
    • 不同点:以 a 模式重新打开文件,不会清空原文件内容,会将文件指针直接移动到文件末尾,新写的内容永远写在最后

标签:文件,打开,utf,流程,write,操作,txt,open
From: https://www.cnblogs.com/Formerly/p/17877397.html

相关文章

  • 聊聊神经网络模型流程与卷积神经网络的实现
    神经网络模型流程神经网络模型的搭建流程,整理下自己的思路,这个过程不会细分出来,而是主流程。在这里我主要是把整个流程分为两个主流程,即预训练与推理。预训练过程主要是生成超参数文件与搭设神经网络结构;而推理过程就是在应用超参数与神经网络。卷积神经网络的实现在聊聊卷......
  • fileinput:一个txt文件的Python库
    文件处理和输入流时,Python中的fileinput模块是一个非常有用的工具。fileinput模块允许迭代处理多个文件,同时还可以处理标准输入流。以下是Python中fileinput模块的五个常见用法。1.逐行迭代文件fileinput模块可以用于逐行迭代处理文件中的内容。importfileinputforlinei......
  • 基于FPGA的图像直方图统计实现,包括tb测试文件和MATLAB辅助验证
    1.算法运行效果图预览  2.算法运行软件版本vivado2019.2 matlab2022a 3.算法理论概述      基于FPGA的图像直方图统计实现主要是通过利用FPGA的并行处理能力,对图像中的每个像素进行统计,以计算出每个灰度级出现的次数或概率。这个过程涉及到对图像数据的快速......
  • python在word文件指定的文字下划线
    #coding:utf-8importosfromwin32com.clientimportDispatchdefget_string_index(substring,string):"""获取同一字符串中的多个相同字符串的起始索引:paramsubstring:需查找的字符串:paramstring:被查找的字符串:return:"""in......
  • 使用SpringBoot实现文件上传和下载
    上传文件:1.在`pom.xml`文件中添加依赖:xml<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot<......
  • 每个.NET开发都应掌握的C#处理文件系统I/O知识点
    上篇文章讲述了C#多线程知识点,本文将介绍C#处理文件的知识点。在.NET开发领域,文件系统I/O是一个至关重要的主题,尤其是在处理文件、目录和数据存储方面。C#作为.NET平台的主要编程语言,提供了丰富而强大的文件系统I/O功能,为开发人员提供了灵活的工具,使其能够高效地处理文件操作。本......
  • MySQL基本操作
    //mysql数据库管理工具简称叫数据库(存放数据,作为动态网站开不可缺少的一环)mysql是一种关系型数据库基本语法:1.查询当前MySQL下有的所有数据库showdatabases;2.创建数据库createdatabase数据库名数据库选项(字符集,校对集)(大部分情况我们都不进行数据选项的设置)......
  • 【Python/数据库】SQLAlchemy基础操作
    一、SQLAlchemy——创建表#ORM#1.Class-Obj#2.创建数据库引擎#3.将所有的Class序列化为数据表#4.ORM操作-CRUD(增删改查操作的简称)1.创建一个class#create_table.pyfromsqlalchemy.ext.declarativeimportdeclarative_baseBase=declarative_base......
  • 【Python/数据库】SQLAlchemy一对多,多对多操作
    SQLAlchemy一对多操作1.创建多表#create_table_ForeginKey.pyfromsqlalchemy.ext.declarativeimportdeclarative_basefromsalalchemyimportColumn,INT,VARCHAR,ForeignKeyfromsqlalchemyimportcreate_engineBase=declarative_base()classStudent(Base)......
  • windows 文件夹共享 设置免密共享
    https://jingyan.baidu.com/article/86f4a73ea60a6f37d6526985.html https://blog.csdn.net/lipengfei_1993/article/details/106297073  不要密码共享有些上位机或者AOI相机的data,可以通过共享访问文件进行解析。把每一台aoi的电脑设置共享,然后在在机房的一台工控机安装......