【python】—— 文件操作

目录

(一)文件是什么

(二)文件路径

(三)文件操作

3.1 打开文件

3.2 关闭文件

 3.3 写文件

3.4 读文件

(四)关于中文的处理

(五)使用上下文管理器


(一)文件是什么

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

  • 在 Windows "此电脑" 中, 看到的内容都是 文件 

通过文件的后缀名, 可以看到文件的类型. 常见的文件的类型如下:

  • 文本文件 (txt)
  • 可执行文件 (exe, dll)
  • 图片文件 (jpg, gif)
  • 视频文件 (mp4, mov)
  • office 文件 (.ppt, docx)

 咱们今天要讲的主要研究最简单的文本文件.


(二)文件路径

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

例如, 我电脑中的 python.exe 这个文件, 描述这个文件的位置, 就可以使用路径

D:\Software\python

【解释说明】

  • D: 表示 盘符. 不区分大小写.
  • 每一个 \ 表示一级目录. 当前 python.exe 就是放在 "D 盘下的 Software目录下的 python目录下的目录中" .
  • 目录之间的分隔符, 可以使用 \ 也可以使用 / . 一般在编写代码的时候使用 / 更方便
     
  1. 上述以 盘符 开头的路径, 我们也称为 绝对路径.
  2. 除了绝对路径之外, 还有一种常见的表示方式是 相对路径. 相对路径需要先指定一个基准目录, 然后以基准目录为参照点, 间接的找到目标文件. 
  3. 描述一个文件的位置, 使用 绝对路径 相对路径 都是可以的. 对于新手来说, 使用 绝对路径 更简单更好理解, 也不容易出错

(三)文件操作

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

3.1 打开文件

我们可以使用内建函数 open 打开一个文件

  • 首先在目录下创建一个【test.txt】文件。具体如下:

  • 接下来,我们使用 open 函数打开文件:
f = open('d:/Software/python/test.txt','r')

【解释说明】

  • 第一个参数是一个字符串, 表示要打开的文件路径
  • 第二个参数是一个字符串, 表示打开方式. 其中 r 表示按照读方式打开. w 表示按照写方式打开. a表示追加写方式打开.
  • 如果打开文件成功, 返回一个文件对象. 后续的读写文件操作都是围绕这个文件对象展开.
  • 如果打开文件失败(比如路径指定的文件不存在), 就会抛出异常
     

【效果展示】

因为我已经创建了【test.txt】文件,所以我此时进行打开操作是能够打开成功的。

但假如此时我把创建的【test.txt】文件删除掉再去打开这个文件,看效果如何:


3.2 关闭文件

使用 close 方法关闭已经打开的文件:即 f.close()

使用完毕的文件要记得及时关闭!
 

一个程序能同时打开的文件个数, 是存在上限的.接下来,我简单的用代码验证下:

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

效果展示: 

【解释说明】 

  • 打开文件,其实就在申请一定的系统资源,当我们不再使用文件的时候就应该关闭文件,让资源得到及时的释放;
  • 否则就可能造成文件资源的泄漏,进一步的导致其他部分的代码无法顺利打开文件,打开看报错就知道发生错误的原因;
  • 其次,大家可以发现此时我们打开文件的数量为【8189】,但是在系统中是可以通过一定的配置设置项来配置打开文件的最大数目的,但是无论配置多少都不是无穷无尽的,因此一定记得要释放资源;
  • 最后,这里的 8189 + 3 =8192(2的13次方),这个大家是否感觉到陌生,这里的 3 即为程序启动时默认打卡的三个文件:标准输入、标准输出、标准错误

【注意】 

  • 上述代码中, 使用一个列表来保存了所有的文件对象. 如果不进行保存, 那么 Python 内置的垃圾回收机制, 会在文件对象销毁的时候自动关闭文件.
  • 但是由于垃圾回收操作不一定及时, 所以我们写代码仍然要考虑手动关闭, 尽量避免依赖自动关闭.

 


 


 3.3 写文件

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

  1. 写文件, 要使用写方式打开, open 第二个参数设为 'w'
  2. 使用 write 方法写入文件.
f = open('d:/Software/python/test.txt','w')
f.write('hello world')
f.close()

 【效果展示】 


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

 


  • 使用 'w' 一旦打开文件成功, 就会清空文件原有的数据

  • 紧接着,我们在执行以下代码:
f = open('d:/Software/python/test.txt','w')
f.write('world')
f.close()
  • 接下来,我们在打开刚才的【test.txt】文件,查看文件中的内容:


  • 使用 'a' 实现 "追加写", 此时原有内容不变, 写入的内容会存在于之前文件内容的末尾.

 

f = open('d:/Software/python/test.txt','a')
f.write('hello')
f.close()

效果展示: 


  • 最后如果针对已经关闭的文件对象进行写操作, 也会抛出异常

 


3.4 读文件

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

f = open('d:/Software/python/test.txt', 'r',encoding='utf8')
result = f.read(2)
print(result)
f.close()

效果展示:


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

先构造一个多行文件.

f = open('d:/Software/python/test.txt', 'r',encoding='utf8')
for line in f:
    print(f'line = {line}')
f.close()

效果展示:

【注意】

  1. 由于文件里每一行末尾都自带换行符, print 打印一行的时候又会默认加上一个换行符, 因此打印结果看起来之间存在空行.
  2. 使用 print(f'line = {line}', end='') 手动把 print 自带的换行符去掉.

  • 使用 readlines 直接把文件整个内容读取出来, 返回一个列表. 每个元素即为一行.
f = open('d:/Software/python/test.txt', 'r',encoding='utf8')
lines = f.readlines()
print(lines)
f.close()

效果展示:


(四)关于中文的处理

当文件内容存在中文的时候, 读取文件内容不一定就顺利.
同样上述代码, 有的执行上述代码不加【encoding = ‘utf8’】时可能会出现异常

计算机表示中文的时候, 会采取一定的编码方式, 我们称为 "字符集"

  1. 所谓 "编码方式" , 本质上就是使用数字表示汉字.
  2. 我们知道, 计算机只能表示二进制数据. 要想表示英文字母, 或者汉字, 或者其他文字符号, 就都要通过编码.
  3. 最简单的字符编码就是 ascii. 使用一个简单的整数就可以表示英文字母和阿拉伯数字.
  4. 但是要想表示汉字, 就需要一个更大的码表.
  5. 一般常用的汉字编码方式, 主要是 GBK 和 UTF-8

必须要保证文件本身的编码方式, 和 Python 代码中读取文件使用的编码方式匹配, 才能避免出现上述问题.

  1. Python3 中默认打开文件的字符集跟随系统, 而 Windows 简体中文版的字符集采用了 GBK, 所以如果文件本身是 GBK 的编码, 直接就能正确处理.
  2. 如果文件本身是其他编码(比如 UTF-8), 那么直接打开就可能出现上述问题

使用记事本打开文本文件, 在 "菜单栏" -> "文件" -> "另存为" 窗口中, 可以看到当前文件的编码方式.

  • 如果此处的编码为 ANSI , 则表示 GBK 编码.
  • 如果此处为 UTF-8 , 则表示 UTF-8 编码.

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

f = open('d:/Software/python/test.txt', 'r',encoding='utf8')

(五)使用上下文管理器

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

  • 使用 with 语句打开文件.
  • with 内部的代码块执行完毕后, 就会自动调用关闭方法
     
with open('d:/Software/python/test.txt', 'r', encoding='utf8') as f:
    lines = f.readlines()
    print(lines)

 效果展示:


 以上便是python中关于文件的基本知识介绍!!!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

打印机怎么连接到电脑?完整指南助你顺利连接

随着科技的不断发展,打印机作为一种常见的办公设备,已经成为我们日常工作不可或缺的一部分。可是打印机怎么连接到电脑呢?本文将介绍三种常见的方法,详细解释如何将打印机连接到电脑,以便用户在面对这一操作时能够迅速…

【软件测试】学习笔记-Nginx 在系统架构中的作用

本篇文章你探讨 Nginx 在应用架构中的作用,并从性能测试角度看如何利用 Nginx 数据统计用户访问量。 Nginx 重要的两个概念 代理 首先要来解释一下什么是代理,正向代理和反向代理是什么意思?各自作用是什么?不少同学经常听到这…

[BSidesCF 2020]Had a bad day

先看url&#xff0c;发现可能有注入 http://655c742e-b427-485c-9e15-20a1e7ef1717.node5.buuoj.cn:81/index.php?categorywoofers 试试能不能查看index.php直接?categoryindex.php不行&#xff0c;试试伪协议 把.php去掉试试 base64解码 <?php$file $_GET[category];…

多域名SSL证书免费申请

在互联网信息安全日益受到重视的今天&#xff0c;SSL证书已经成为了网站安全的重要组成部分。那么&#xff0c;什么是SSL证书呢&#xff1f;简单来说&#xff0c;SSL证书是一种用于保证网络传输过程中数据安全的认证机制&#xff0c;它可以确保网站和用户之间的数据传输是加密的…

OpenCV读取摄像头窗口变大且很卡的解决方法

视频讲解 OpenCV读取摄像头窗口变大且很卡的解决方法 测试过程 读取摄像头窗口变大且很卡的代码 import cv2 cap cv2.VideoCapture(0) if not cap.isOpened():print("Cannot open camera")exit() while True:ret, frame cap.read()if not ret:print("no str…

TCP 异常断开连接【重点】

参考链接 https://xiaolincoding.com/network/3_tcp/tcp_down_and_crash.html https://xiaolincoding.com/network/3_tcp/tcp_unplug_the_network_cable.html#%E6%8B%94%E6%8E%89%E7%BD%91%E7%BA%BF%E5%90%8E-%E6%9C%89%E6%95%B0%E6%8D%AE%E4%BC%A0%E8%BE%93 关键词&#xff1a…

用的到的linux-Day1

前言&#xff1a; 从入门IT开始我们知道Linux操作系统与其他操作系统不同&#xff0c;Linux因为其独特的优势&#xff0c;被广泛应用在服务器领域&#xff0c;而且是一个近乎完美的操作系统&#xff0c;运行稳定、功能强大、安全性高、开源、可定制等等。 因此我打算从24年开始…

操作无法完成,因为文件已在Windows资源管理器中打开,如何解决?以及如何将哔哩哔哩下载好的视频导出到电脑中播放?— 以vivo手机为例

前言 想删除流氓软件的时候&#xff0c;提示操作无法完成&#xff0c;因为文件已在Windows资源管理器中打开&#xff0c;但打开任务管理器&#xff0c;似乎又没有符合的正在执行的程序&#xff0c;更别说打开让人看到头疼的资源监视器了&#xff0c;本文将用一招解决如上问题 …

收单外包服务机构备案分析(2020-2023年度)

孟凡富 为加强收单业务外包服务市场规范管理&#xff0c;保护市场参与主体和消费者合法权益&#xff0c;促进收单业务健康发展&#xff0c;中国支付清算协会根据《银行卡收单业务管理办法》&#xff08;中国人民银行公告〔2013〕第9号公布&#xff09;、《中国人民银行关于加强…

手拉手JavaFX UI控件与springboot3+FX桌面开发

目录 javaFx文本 javaFX颜色 字体 Label标签 Button按钮 //按钮单击事件 鼠标、键盘事件 //(鼠标)双击事件 //键盘事件 单选按钮RadioButton 快捷键、键盘事件 CheckBox复选框 ChoiceBox选择框 Text文本 TextField(输入框)、TextArea文本域 //过滤 (传入一个参数&a…

【MySQL】打开科技创新的第一生产力

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-EtRkflNU19AGWAkT {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

应用机器学习的建议 (Advice for Applying Machine Learning)

1.决定下一步做什么 问题&#xff1a; 假如&#xff0c;在你得到你的学习参数以后&#xff0c;如果你要将你的假设函数放到一组 新的房屋样本上进行测试&#xff0c;假如说你发现在预测房价时产生了巨大的误差&#xff0c;现在你的问题是要想改进这个算法&#xff0c;接下来应…

PHP中一些特征函数导致的漏洞总结

第一部分&#xff1a; 特征函数 接触到几个常用的函数&#xff1a; \\ \\\ md5 intval strpos in_array preg_match str_replacephp用这些函数实现过滤一些代码&#xff0c;漏洞可能有一些特性&#xff0c;利用这些特征代码进行对比&#xff1b;账号密码对比&#xff1b;强制检…

马尔可夫预测(Python)

马尔科夫链&#xff08;Markov Chains&#xff09; 从一个例子入手&#xff1a;假设某餐厅有A&#xff0c;B&#xff0c;C三种套餐供应&#xff0c;每天只会是这三种中的一种&#xff0c;而具体是哪一种&#xff0c;仅取决于昨天供应的哪一种&#xff0c;换言之&#…

从c到c++——5:内联函数

在调用常规函数时&#xff0c;我们会在它的汇编代码中看到call指令。 如果我们继续调试&#xff0c;如果我们继续调试&#xff0c;会发现执行call会跳转到其他地方&#xff0c;之后会再调用一堆其他的指令&#xff0c;在我的测试&#xff08;vs2022&#xff09;下&#xff1a; …

day31WEB攻防-通用漏洞文件上传js验证mimeuser.ini语言特性

目录 1.JS验证 2.JS验证MIME 3.JS验证.user.ini 4.JS验证.user.ini短标签 &#xff08;ctfshow154&#xff0c;155关&#xff09; 5.JS验证.user.ini短标签过滤 [ ] 6.JS验证.user.ini短标签加过滤文件头 有关文件上传的知识 1.为什么文件上传存在漏洞 上传文件…

[蓝桥杯]真题讲解:飞机降落(DFS枚举)

[蓝桥杯]真题讲解&#xff1a;飞机降落&#xff08;DFS枚举&#xff09; 一、视频讲解二、暴力代码&#xff08;也是正解代码&#xff09; 一、视频讲解 视频讲解 二、暴力代码&#xff08;也是正解代码&#xff09; //飞机降落&#xff1a; 暴力枚举DFS #include<bits/…

【轮式平衡机器人】——TMS320F28069片内外设之GPIO

引入 接下来的几期博客会介绍轮式平衡机器人TMS320F28069片内外设&#xff0c;了解片内外设的基本原理&#xff0c;内容较为基础&#xff0c;都是些简单的simulink模型&#xff0c;旨在将复杂的原理过渡到simulink软件应用。足够了解的博友可跳过。 后续还将会结合MATLAB/Sim…

前端学习:HTTP协议、请求响应、分层解耦

HTTP协议 HTTP-概述 HTTP&#xff1a;Hyper Text Transfer Protocol(超文本传输协议)&#xff0c;规定了浏览器与服务器之间数据传输的规则。如果想知道http协议的数据传输格式有哪些&#xff0c;可以打开浏览器&#xff0c;点击 F12 打开开发者工具&#xff0c;点击Network 来…

DataStream API(转换算子)

目录 源算子 转换算子 1&#xff0c;基本转换算子 1.1映射&#xff08;map&#xff09; 1.2过滤&#xff08;filter&#xff09; 1.3扁平映射&#xff08;flatMap&#xff09; 2&#xff0c;聚合算子 2.1按键分区&#xff08;keyBy&#xff09; 2.2简单聚合 3&#x…