Python---文件操作

news2024/9/20 14:48:19

专栏:python
个人主页:HaiFan.
专栏简介:本专栏主要更新一些python的基础知识,也会实现一些小游戏和通讯录,学时管理系统之类的,有兴趣的朋友可以关注一下。

文件操作

  • 思维导图
  • 前言
  • 文件是什么
  • 文件路径
  • 文件操作
    • 打开文件
    • 关闭文件
  • 写文件
  • 读文件
  • 上下文管理器


思维导图

在这里插入图片描述


前言

像已下载的歌曲,文本文件,图片等,这些数据都是保存在硬盘上的。像我们写的程序中,创建的变量,是在内存中的。

  1. 内存的空间更小,硬盘空间更大。
  2. 内存的访问更快,硬盘访问慢
  3. 内存成本更贵,硬盘成本便宜
  4. 内存的数据易丢失,硬盘的数据可以持久化存储

文件是什么

变量是把数据保存在内存中,如果程序重启,内存中的数据就会丢失,要是想让数据持久化存储,就可以把数据存储到硬盘中,也就是在文件中保存。

在这里插入图片描述
像C盘D盘,这里的内容都是硬盘上的内容,也都是文件。

通过文件的后缀名,可以看到文件的类型。

文本文件txt
可执行文件exe
图片文件jpg
视频文件mp4
office文件ppt
等等

文件路径

一个机器上,会存在很多文件,为了让这些文件更方便的被组织,往往会使用很多的文件夹(目录)来整理文件。
实际一个文件往往是放在一些列的目录结构之中的。
为了方便确定一个文件的所在位置,可以使用文件路径来描述。

如pycharm的路径

D:\python\PyCharm Community Edition 2022.3.1

  1. D:表示盘符,不区分大小写
  2. 每一个\表示一级目录
  3. 目录之间的分隔符,可以使用\也可以使用/

盘符开头的路径,称为绝对路径
除了绝对路径之外,还有相对路径,相对路径需要先指定一个基准目录,然后以基准目录为参照点,简洁的找到目标文件。

文件操作

要使用文件,主要是通过文件来保存数据,并且在后续把保存的数据读取出来,但是要像读写文件,需要先打开文件,读写完之后还要关闭文件

打开文件

使用内建函数open打开一个文件

open('d:/FileOperator/python.txt','r')
  1. 第一个参数 是一个字符串,表示要打开的文件的路径
  2. 第二个参数是一个字符串,表示打开方式,其中r(read)表示按照读方式打开,w(write)表示按照写方式打开,a(append)表示追加写方式打开,在原内容的末尾追加。
  3. 如果打开文件失败,就会抛出异常
  4. 返回值是文件对象(文件的内容是在硬盘上的,此处的文件对象是内存上的一个变量,后续的读写文件操作,都是拿着这个文件对象来进行操作的)
f = open('d:/FileOperator/python.txt','r')

在这里插入图片描述

关闭文件

使用close方法来关闭已经打开的文件

f.close()

使用完文件一定要记得及时关闭文件。

打开文件,其实是在申请一定的系统资源,不再使用的时候,资源就应该即使释放。
否则就可能会造成文件资源泄露,进一步倒是其他部分的代码无法顺利打开文件了。
正是因为一个系统的资源是有限的,因此一个程序能打开的文件个数,也是有限的。

flist = []
cnt = 0
while True:
    f = open('d:/FileOperator/python.txt', 'r')
    flist.append(f)
    cnt += 1
    print(f'cnt = {cnt}')

在这里插入图片描述
只打开不关闭,系统资源再多,也有借完的时候。
在这里插入图片描述
文件打开了8189次,当然,在系统中,是可以通过一些设置项,来配置打开文件的最大数目。但无论配置的是多少,都应该及时的关闭文件。


每个程序在启动时,都会默认打开三个文件

  1. 标准输入 键盘 input
  2. 标准输出 显示器 print
  3. 标准错误 显示器

写文件

文件打开之后,就可以写文件了。

  1. 写文件要先打开文件,open第二个参数设为w
  2. 使用write方法写入文件
f = open('d:/FileOperator/python.txt', 'w')
f.write("新年快乐")
f.close()
print(f'文件写入成功')

在这里插入图片描述
此时在打开文件。
在这里插入图片描述
就可以看到刚刚写入文件的内容.


如果是使用r方式打开文件,则写入时会抛出异常

f = open('d:/FileOperator/python.txt', 'r')
f.write("新年快乐1")
f.close()

在这里插入图片描述


使用w打开文件成功,就会情况文件原有的数据
使用a实现追加内容,此时原有的内容不会改变,写入的数据会存在于原有的内容的末尾

现在文件中的内容是

在这里插入图片描述

f = open('d:/FileOperator/python.txt', 'w')
f.write("新年快乐,新年快乐")
f.close()

在这里插入图片描述
可以看到源文件内容被清空了。

f = open('d:/FileOperator/python.txt', 'a')
f.write("hello world 新年快乐,新年快乐")
f.close()

在这里插入图片描述
使用a方式写入文件,可以看到,是在文件内容末尾追加的数据。

读文件

读文件内容需要使用r的方式打开文件
使用read方法完成读操作,参数表示读取几个字符

在这里插入图片描述
此时文件里是没有内容的,先读入数据。

f = open('d:/FileOperator/python.txt', 'w')


ch : int = 97

for i in range(0,26):
    f.write(chr(i + ch))

f.close()

在这里插入图片描述
可以看出,我们往文件里多了了26个字母。
接下来把文件里的内容,输出到屏幕上。

f = open('d:/FileOperator/python.txt', 'r')

fstr = f.read(26)
print(fstr)

在这里插入图片描述


如果文本是多行,可以用for循环一次读取一行。

在这里插入图片描述
把数据写到文件里面。

f = open('d:/FileOperator/python.txt', 'r')

fstr = f.read(2)
print(fstr)

在这里插入图片描述
当文件中的内容存在中文的时候,读取文件内容不一定顺利。

所谓编码方式,本质上就是使用数字表示汉字,我们知道,计算机只能表示二进制数据,要想表示英文字母,或者汉字,或者其他的符号,都要通过编码,最简单的字符编码就是ascii,使用一个简单的整数就可以表示英文字母和阿拉伯数字,但是要想表示汉字,就需要一个更大的码表,一般常用的汉字编码方式主要是:GBK和UTF-8
必须要保证文章本身的编码方式和python代码中读取文件使用的编码方式匹配,才能避免出现上述问题。
Python3 中默认打开文件的字符集跟随系统, 而Windows 简体中文版的字符集采用了 GBK, 所以如果文件本身是 GBK 的编码, 直接就能正确处理.如果文件本身是其他编码(比如 UTF-8), 那么直接打开就可能出现上述问题。

点击记事本,点击文件,点击另存为,在窗口中可以看到当前文件的编码方式。
在这里插入图片描述
如果此处的编码为ANSI,则表示GBK编码
如果此处为UTF-8,则表示UTF-8编码。

此时修改打开文件的代码,给open方法加上encoding参数,显示的指定为和文本相同的字符集,问题即可解决

f = open('d:/FileOperator/python.txt', 'r',encoding = 'UTF-8')

fstr = f.read(2)
print(fstr)

在这里插入图片描述
此时就会显示文件中的内容。

f = open('d:/FileOperator/python.txt', 'r',encoding = 'UTF-8')

for line in f:
    print(line)

f.close()

在这里插入图片描述
这里为什么会有换行呢?
因为print自带换行,并且文件行末也自带换行,所以会多出一个换行。

可以给print在设定个参数,修改print自动添加换行的行为。

f = open('d:/FileOperator/python.txt', 'r',encoding = 'UTF-8')

for line in f:
    print(line,end='')

f.close()

在这里插入图片描述

end参数表示每次打印之后要在末尾加个什么,默认是换行

使用readlines直接把整个文件内容读取出来,返回一个列表,每个元素即为一行

f = open('d:/FileOperator/python.txt', 'r',encoding = 'UTF-8')

print(f.readlines())

f.close()

在这里插入图片描述

\n就是换行符

上下文管理器

打开文件之后,容易忘记关闭文件,Python’中提供了上下文管理器,来帮助程序猿自动关闭文件。

  • 使用with语句打开文件
  • with内部的代码执行完毕之后,就会自动调用关闭的方法
def function():
    f = open('D:/FileOperator/python.txt','r',encoding='UTF-8')
    #代码
    #代码
    #代码
    #代码
    #代码
    #代码
    #代码

当你做一些项目的时候,一个函数中,代码过的多的话,可能会忘记写关闭文件的操作。

def function():
    with  open('D:/FileOperator/python.txt','w',encoding='UTF-8') as f:
        #进行一些与文件有关的代码
        f.write("好好学习")
        if True:
            return
 with  open('D:/FileOperator/python.txt','w',encoding='UTF-8') as f:

这里是with语句里f的效果与
f = open('d:/FileOperator/python.txt', 'r',encoding = 'UTF-8')里的f`的效果是一样的。

最后有一个代表着又是一个代码块。当with所对应的代码块结束的时候,就会自动执行关闭文件的操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/177869.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot基础回顾:场景启动器

上一章我们回顾了 SpringBoot 的自动装配,以及承载自动装配的核心——自动配置类。自动配置类的定义位置通常在每个场景的 jar 包中,配置 spring.factories 文件中 EnableAutoConfiguration 的位置通常在相应的 autoconfigure jar 包下。本章会着重回顾和…

SpringMVC简介

SpringMVC简介什么是MVC?MVC的工作流程什么是SpringMVC?HelloWorld创建maven工程配置web.xml创建请求控制器配置springMVC.xml配置文件什么是MVC? MVC是一种软件架构的思想,将软件按照模型、视图、控制器来划分 M:Model,模型层,指工程中的javaBean,作用是是处理数…

恶意代码分析实战 9 隐蔽的恶意代码启动

9.1 Lab12-1 分析 查看程序的导入函数。 通过这几个函数,可以推断出是远程线程注入。 使用ProMon检测,并没有看到什么有用的信息。 使用Proexproer检查。 也没有什么有用的信息。 拖入IDA中分析一下。 将这几个字符串重命名,便于识别。 …

【MyBatis】| MyBatis使用⼩技巧

目录 一:MyBatis使用⼩技巧 1. #{}和${} 2. typeAliases 3. mappers 4. IDEA配置⽂件模板 5. 插⼊数据时获取⾃动⽣成的主键 一:MyBatis使用⼩技巧 1. #{}和${} #{}:先编译sql语句,再给占位符传值,底层是Prepar…

【C语言进阶】一文带你学会C语言文件操作

前言 我们前面学习结构体时,写了通讯录的程序,当通讯录运行起来的时候,可以给通讯录中增加、删除数据,此时数据是存放在内存中,当程序退出的时候,通讯录中的数据自然就不存在了,等下次运行通讯录…

Python---自动生成二维码

专栏:python 个人主页:HaiFan. 专栏简介:本专栏主要更新一些python的基础知识,也会实现一些小游戏和通讯录,学时管理系统之类的,有兴趣的朋友可以关注一下。 自动生成二维码 二维码的本质上,就…

人工智能学习06--pytorch05--torchvision中的数据集使用DataLoader的使用

torchvision中的数据集使用 test_set的class属性 把数据集每一部分都变成tensor类型 现在输出的就是tensor数据类型了 DataLoader的使用 batch_size 一摞牌中,每次抓几张shuffle 打乱,第二次打牌前,牌的顺序要跟第一次不一样&#xff0…

【JavaSE】一文看懂构造器/构造方法(Cunstructor)

🌱博主简介:大一计科生,努力学习Java中!热爱写博客~预备程序媛 📜所属专栏:Java冒险记【从小白到大佬之路】 ✈往期博文回顾: 【JavaSE】保姆级教程|1万字10张图学会类与对象–建议收藏 🕵️‍♂️近期目标…

CSS边框、边距、轮廓(边框宽度/颜色/各边/简写属性/圆角边框/内外边距/高度宽度/框模型/轮廓宽度/颜色/属性/偏移)——万字长文|一文搞懂

目录 CSS边框 CSS 边框属性 CSS 边框样式 实例 CSS 边框宽度 实例 特定边的宽度 实例 CSS 边框颜色 实例 特定边框的颜色 实例 HEX 值 实例 RGB 值 实例 HSL 值 实例 CSS 边框 - 单独的边 实例 不同的边框样式 实例 它的工作原理是这样的: …

ROS学习寄录1

1 创建ROS工作空间 1.1 创建工作空间 (1)创建工作空间 mkdir catkin_ws (2)进入catkin_ws文件夹,然后创建一个src文件夹 cd catkin_ws mkdir src (3)进入src文件夹,生成CMakeL…

「自控原理」4.2 根轨迹法分析与校正

本节介绍利用根轨迹法分析系统性能发热方法 本节介绍根轨迹校正 文章目录利用根轨迹分析系统性能主导极点法增加零极点对系统的影响根轨迹校正串连超前校正原理与步骤超前校正例题串连滞后校正附加开环偶极子的作用原理与步骤滞后校正例题利用根轨迹分析系统性能 利用根轨迹分…

Oracle cloud vps实例配置访问

Oracle cloud vps实例配置访问创建一个免费配置的实例,并配置访问创建实例时,系统映像选择创建实例时候的ssh密钥配置子网,打开22端口使用工具登录服务器配置多个公钥,支持多个ssh私钥来登录登录vps实例修改登录用户和身份验证方式…

【接口】接口超时原因分析

接口超时的原因: 一、网络抖动 有可能是你的网络出现抖动、网页请求API接口、接口返回数据给网页丢包了。 二、被带宽占满 用户量暴增,服务器网络带宽被占满。 服务器带宽:一定时间内传输数据的大小,如:1s传输10M…

剑指Offer 第1天

第 1 天 栈与队列(简单) 剑指 Offer 09. 用两个栈实现队列 class CQueue { public: CQueue() {} void appendTail(int value) { s1.push(value); } int deleteHead() { while(!s1.empty()) { …

【Git :分布式版本控制工具】

【Git :分布式版本控制工具】 了解 Git 基本概念 能够概述 Git 工作流程 能够使用 Git 常用命令 熟悉 Git 代码托管服务 能够使用 IDEA 操作 Git 一、 概述 1. 开发中的实际场景 备份代码还原协同开发追溯问题代码的编写人和编写时间 2. 版本控制器的方式 集中式…

【数据结构】6.6 图的应用

文章目录生成树及其构造生成树的特点无向图的生成树6.6.1 最小生成树最小生成树及其典型应用MST性质构造最小生成树1. Prim(普里姆)算法2. Kruskal(克鲁斯卡尔)算法两种算法比较6.6.2 最短路径最短路径问题1. Dijkstra(迪杰斯特拉)算法迪杰斯特拉算法步骤2. Floyd(弗洛伊德)算法…

从零搭建一个组件库(二)创建代码规范

文章目录前言集成eslint1.安装2.替换默认解析器3.创建.eslintrc.yml配置文件4.创建忽略文件.eslintignore集成 prettier1.安装2.创建配置文件.prettierrc集成# commitizen1.安装2.修改package.json3.测试className的BEM规范1.安装2.BEM概述3.创建hooks函数4.使用hooks函数5.封装…

Vuex里面四个map方法(mapState、mapGetters、mapActions、mapMutation)

本章节主要讲述Vuex里面的四个优化代码的map方法,mapState、mapGetters、mapActions、mapMutation 一、store文件夹下面index.js主要内容,包含state(用于存储数据)、getters(计算属性)、mutatiions(加工数据)、actions(相应组件动作、写逻辑) 二、四个ma…

多个盒子排列规则(视觉格式化模型) 多个盒子的排列 页面布局

目录常规流常规流布局块盒的排列规则常规流 盒模型:规定单个盒子的规则 视觉格式化模型(布局规则):页面中的多个盒子排列规则 视觉格式化模型,大体上将页面中盒子的排列分为三种方式: 常规流浮动定位 …

react源码:目录结构、调试源码

我的技术栈是React,最近在整理react的源码,react版本是18.1.0,之前版本,没有看过,就此略过。 源码目录 从github将源码下载后,先看看源码目录结构,如下图所示: fixtures:代码贡献者提供的测试react package:react源码的主要部分,包含了Schedule、reconcile等等 s…