一、什么是文件

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

用户/应用程序

操作系统(文件)

计算机硬件(硬盘)

二、为何要用文件

  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. Servlet Session MVC模式

    一   什么是Session 当首次使用session时,服务器端要创建session,session是保存在服务器端,而给客户端的session的id(一个cookie中保存了sessionId). ...

  2. activeMQ从入门到简单集群指南

    1.什么是amq MQ是消息中间件,基于JAVA的JMS消息服务机制来传递信息. 2.mq的作用 MQ给程序之间提供了一个缓冲,避免了在程序交互频繁的情况下,提高程序性能瓶颈和数据的可靠性 3.mq怎 ...

  3. spring Cloud网关之Spring Cloud Gateway

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

  4. 命令中"|"的意义

    管道命令,是指 | 的左边运行结果是|右边的输入条件或者范围.如:history | grep date指从history这条命令运行的结果中显示包含有 “date” 的命令 下面举一个例子: 这是运 ...

  5. Android学习笔记样式资源文件

    样式资源和主题资源都是写在styles.xml文件里面的 <style name="title"> <item name="android:textSi ...

  6. java锁总结

    1.公平锁与非公平锁 公平锁:指多个线程在等待同一个锁时,必须按照申请锁的先后顺序来依次获得锁. 优点:等待锁的线程不会饿死.缺点:整体效率相对较低. 非公平锁:可以抢占,即如果在某个时刻有线程需要获 ...

  7. 机器学习——打开集成方法的大门,手把手带你实现AdaBoost模型

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是机器学习专题的第25篇文章,我们一起来聊聊AdaBoost. 我们目前为止已经学过了好几个模型,光决策树的生成算法就有三种.但是我们每 ...

  8. Sharding-JDBC 快速入门第一课

    1.  概述 ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC.Sharding-Proxy和Sharding-Sidecar(计划中)这 ...

  9. vue学习第二天:Vue跑马灯效果制作

    分析: 1. 给开始按钮绑定一个点击事件 2.在按钮的事件处理函数中,写相关的业务代码 3.拿到msg字符串 4.调用字符串的substring来进行字符串的截取操作 5.重新赋值利用vm实例的特性来 ...

  10. SSM登录拦截验证

    /** * 登陆拦截器,用于后台管理系统拦截,判断用户是否登录 * @author ljy * @date 2015/8/19 */public class LoginForAdminIntercep ...