一、什么是文件

文件是操作系统提供给用户/应用程序操作硬盘的一种虚拟概念/接口

用户/应用程序

操作系统(文件)

计算机硬件(硬盘)

二、为何要用文件

  1. 用户/应用程序可以通过文件将数据永久保存在硬盘上
  2. 操作文件就是操作硬盘
  3. 用户/应用程序直接操作的是文件,对文件进行的操作就是在向操作系统发送系统调用,再由操作系统将其转化成具体的硬盘操作

三、如何使用文件

3.1文件操作的基本流程

#1.打开文件,由程序想操作系统发起系统调用open()操作系统打开该文件,等于在硬盘上开辟了一个空间并给一个返回值给f
f = open("a.txt",mode="rt",encoding="utf-8")
#2.调用文件对象的xx方法,会被操作系统转换成操作硬件的操作
data = f.read()
#3.在完成对文件的操作后需要关闭文件,以免对操作系统造成资源浪费

3.2资源回收with上下文管理

通过上面这张图我们可以看出来,打开一个文件会占用两部分资源:

第一、应用程序为了对文件操作定义的文件对象在内存中占用空间

第二、操作系统为了建立应用程序和硬盘的联系打开的文件资源

所以在每次文件操作结束后,我们都需要对这两部分资源进行回收

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

在这里必须先关闭文件再回收变量,否则会找不到该文件导致无法关闭,通常情况下del f不需要写,因为python存在垃圾回收机制,f.close()等于把变量值和f的对应关系断开了。所以只要记住每次都要在最后写close操作。但还是有时候可能会忘记,所以python为了开发人员的方便,提供了with关键词来管理上下文

with打开文件的方式

with open("a.txt","rt",encoding="utf-8") as f:
f.read()
#可以用with打开多个文件,用逗号分隔
with open("a.txt","rt") as f1,open("b.txt","w") as f2:
pass

3.3指定操作文本的字符编码

上节课我们学到了,要让文件不出现乱码,就要统一编码解码用的字符编码,用什么存就要用什么取。其中如果我们不指定打开文件的时候用什么字符编码打开,就会使用操作系统默认的打开。

mac,linux 操作系统默认的是 utf-8

windows 操作系统默认的是 GBK

我们使用的pycharm默认使用utf-8存放,这时候我们用pycharm写了一个文本,在Windows操作系统下若没有定义打开文本的字符编码,就会用GBK打开,就会报错,如下图

f = open("a.txt",r,encoding="utf-8")#正确写法

四、文件的操作模式

t文本(默认模式)

  1. 默认都是以str(unicode)为单位的
  2. 文本文件
  3. 必须指定encoding=‘utf-8’

b 二进制/bytes

4.1控制文件读写操作的模式(t模式)

  1. r(不写默认):只读
  2. w:只写
  3. a:只追加写
  4. +:r+,w+,a+

4.1.1案例1:r模式的使用

#r只读模式,文件不存在时报错,文件存在则把指针跳到开头
with open("a.txt",mode="rt",encoding="utf-8") as f:
res = f.read()#把文件的所有内容都赋值给res
print(res) #小练习,实现登录功能
name_inp = input("your name>")
pwd_inp = input("your pws>")
with open("a.txt",mode="rt",encoding="utf-8") as f :
for line in f:
username,password = line.strip().split(":")
if username == name_inp and password == pwd_inp:
print("welcome")
break
else:
print("账号名或者密码错误")

4.1.2案例二:w模式的使用

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

4.1.3案例三:a模式的使用

#a值追加写模式:文件不存在则创建文件,文件存在则把光标跳到文件末尾
with open("a.txt",mode="a",encoding="utf-8") as f :
f.write("aaa")
#w模式和a模式的异同:
#相同点:打开文件不关闭的情况下,连续写入新内容,新写的内容会跟在之前写的后面
#不同点:w模式打开文件会清空文件,a模式只会让光标跳到最后
#练习:实现注册功能: username = input("请输入注册的用户名:")
password = input("请输入注册的密码:")
with open("a.txt",mode="a",encoding="utf-8") as f :
f.write("\n{}:{}".format(username,password))

4.1.4案例四:+模式的使用(了解)

r+,w+,a+都是可读可写,但平时不会用

day11 文件操作(上)的更多相关文章

  1. C# 文件操作(上传,下载,读取,写入)

    1. 通过byte[]数据下载文件(这种方法可用于以开放Api的形式传递文件内容) public void FileDownLoadByByte(byte[] fileData, string fil ...

  2. C的文件操作2

    [转] C语言文件操作  概述 所谓文件(file)一般指存储在外部介质上数据的集合,比如我们经常使用的mp3.mp4.txt.bmp.jpg.exe.rmvb等等.这些文件各有各的用途,我们通常将它 ...

  3. 《Java核心技术卷二》笔记(二)文件操作和内存映射文件

    文件操作 上一篇已经总结了流操作,其中也包括文件的读写.文件系统除了读写以为还有很多其他的操作,如复制.移动.删除.目录浏览.属性读写等.在Java7之前,一直使用File类用于文件的操作.Java7 ...

  4. 通过cmd完成FTP上传文件操作

    一直使用 FileZilla 这个工具进行相关的 FTP 操作,而在某一次版本升级之后,发现不太好用了,连接老是掉,再后来完全连接不上去. 改用了一段时间的 Web 版的 FTP 工具,后来那个页面也 ...

  5. ASP.NET中的文件操作(文件信息,新建,移动,复制,重命名,上传,遍历)(亲测详细)

    做了几天的文件操作,现在来总结一下,错误之处,还望指点!以文件为例,如果对文件夹操作,基本上将File换为Directory即可(例:FileInfo file = new FileInfo(Path ...

  6. php课程---文件操作及文件上传的代码总结

    php里面文件包含目录和文件两种 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "h ...

  7. hadoop的hdfs文件操作实现上传文件到hdfs

    这篇文章主要介绍了使用hadoop的API对HDFS上的文件访问,其中包括上传文件到HDFS上.从HDFS上下载文件和删除HDFS上的文件,需要的朋友可以参考下hdfs文件操作操作示例,包括上传文件到 ...

  8. thinkphp对文件的上传,删除,下载操作

    工作需要,整理一下最近对php的学习经验,希望能对自己有帮助或者能帮助那些需要帮助的人. thinkphp对文件的操作,相对来说比较简单,因为tp封装好了一个上传类Upload.class.php 废 ...

  9. PHP文件上传和文件操作案例

    <?php /* *文件配置变量$dirname是目录名称 */ session_start(); $dirname = 'upload'; $fileClass = new fileClass ...

随机推荐

  1. AbstractCollection类中的 T[] toArray(T[] a)方法源码解读

    一.源码解读 @SuppressWarnings("unchecked") public <T> T[] toArray(T[] a) { //size为集合的大小 i ...

  2. hadoop知识整理(4)之zookeeper

    一.介绍 一个分布式协调服务框架: 一个精简的文件系统,每个节点大小最好不大于1MB: 众多hadoop组件依赖于此,比如hdfs,kafka,hbase,storm等: 旨在,分布式应用中,提供一个 ...

  3. v-on 缩写

    <!-- 完整语法 --> <a v-on:click="doSomething"></a> <!-- 缩写 --> <a @ ...

  4. PIVOT | UNPIVOT_1

    Pivot应用 /* <Microsoft SQL Server 2008 T-SQL Fundamentals (PRO-Developer)> <Microsoft SQL Se ...

  5. ojdbc6中OraclePreparedStatement的ArrayIndexOutOfBoundsException异常BUG-6396242

    现场信息 Caused by: java.lang.ArrayIndexOutOfBoundsException: -32203 at oracle.jdbc.driver.OraclePrepare ...

  6. Excel只想显示一部分日期,怎样把其余部分隐藏起来?

      问题:只想显示一部分日期,怎样把其余部分隐藏起来? 方法:分列 Step1:选中需要修改的单元格——数据——分列. Step2:固定宽度——点击下一步. Step3:在建立分列处单击鼠标(若想取消 ...

  7. spring Cloud网关之Spring Cloud Gateway

    Spring Cloud Gateway是什么?(官网地址:https://cloud.spring.io/spring-cloud-gateway/reference/html/) Spring C ...

  8. Windows 程序设计(4) MFC-02 基本控件-上

    1. Button 按钮控件 1.1.按钮控件的基本使用 新建对话框工程,拖拽按钮控件,添加点击事件响应函数! a.双击模版进行添加: b.事件方式进行添加: button的常见事件类型 void C ...

  9. cb30a_c++_STL_算法_查找算法_(3)search_find_end

    cb30a_c++_STL_算法_查找算法_(3)search_find_endsearch()pos = search(ideq.begin(), ideq.end(), ilist.begin() ...

  10. 《Elasticsearch 权威指南》阅读笔记

    书籍地址 https://www.elastic.co/guide/cn/elasticsearch/guide/current/languages.html