Python基础系列-文件

news2024/9/22 10:02:58

 🌈个人主页: 会编程的果子君
💫个人格言:“成为自己未来的主人~” 

 

目录

 文件是什么

文件路径

文件操作

打开文件

关闭文件

写文件

读文件

关于中文的处理

使用上下文管理器


 文件是什么

变量是把数据保存到内存中,如果把程序重启/主机重启,内存中的数据就会丢失。

要想能让数据被持久化存储,就可以把数据存储到硬盘中,也就是在文件中保存。

在windows“此电脑”中,看到的内容都是文件,

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

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

我们主要研究的是最简单的文本文件

文件路径

一个机器上,会存在很多文件,为了让这些文件更方便的被组织,往往会使用很多的文件夹(也叫做目录)来整理文件。

实际一个文件往往是放在一系列的目录结构之中的

为了方便确定一个文件所在的位置,使用文件路径来进行描述。

 例如,在我D盘中的这个文件,描述这个文件的位置,就可以使用路径 D:\CloudMusic\cloudmusic.exe来表示

  • D:表示盘符,不区分大小写
  • 每一个\表示一级目录,当前cloudmusic.exe就是放在D盘下的CloudMusic目录下的
  • 目录之间的分隔符,可以使用\,也可以使用/,一般在编写代码的时候使用/更方便

上述以盘符开头的路径,我们也称为绝对路径

除了绝对路径以外,还有一种常见的表示方法是相对路径,相对路径需要先指定一个基准目录,然后以基准目录为参照点,间接的找到目标文件

描述一个文件的位置,使用绝对路径和相对路径都是可以的,对于新手来说,使用绝对路径更好理解,也不容易出错。

文件操作

要使用文件,主要是通过文件来保存数据,并且在后续把保存的数据读取出来

但是要想读写文件,需要先“打开文件”,读写完毕之后还要“关闭文件”

打开文件

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

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

关闭文件

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

f.close()

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

一个程序能同时打开的文件个数,是存在上限的

 

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

 

如上面的代码所示,如果一直循环的打开文件,而不去关闭的话,就会出现上述报错

当一个程序打开的文件个数超过上限,就会抛出异常

注意:上述代码中,使用一个列表来保存了所有的文件对象,如果不进行保存,那么Python内置的垃圾回收机制,会在文件对象销毁的时候自动关闭文件

但是由于垃圾回收机制不一定及时,所以我们写代码仍然要考虑手动关闭,尽量避免依赖自动关闭

写文件

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

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

 

用记事本打开文件,即可看到文件修改后的内容

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

 

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

 

  •  使用‘w’一旦打开文件成功,就会清空文件原有的数据
  • 使用‘a’实现“追加写”,此时原有内容不变,写入的内容会存在于之间的文件内
f=open('d:/test.txt','a')
f.write('world')
f.close()

 

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

 

f=open('d:/test.txt','w')
f.write('hello')
f.close()
f.write('world')

 

读文件

  • 读文件内容需要使用‘r’的方式打开文件

  • 使用read方法完成读操作,参数表示“读取几个字符”

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

 

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

 


f=open('d:/test.txt','r',encoding='UTF-8')
for line in f:
    print(f'line={line}',end=' ')
f.close()

 

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

 

f=open('d:/test.txt','r',encoding='UTF-8')
lines=f.readlines()
print(lines)
f.close()

 

关于中文的处理

当文件内容存在中文的时候,读取文件内容不一定就顺利

同样上述代码,有的同学执行时可能就会出现异常

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

所谓“编码方式 ”,本质上就是使用数字表示汉字

我们知道,计算机只能表示二进制数据,要想表示英文字母,或者汉字,或者其他文字符号,就要通过编码

最简单的字符编码就是ascll,使用一个简单的整数就可以表示英文字母和阿拉伯数字,但是要想表示汉字,就需要一个更大的码表

一般的汉字编码方式,主要是GBK和UTF-8

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

Python3中默认打开文件的字符集跟随系统,而Windows简体中文的字符集采用了GBK,如果文件本身是GBK的编码,直接就能正确处理

如果文件本身是其他编码(比如UTF-8),那么直接打开就可能出现上述问题

使用记事本打开文本内容,可以看到当前的文件的编码方式

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

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

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

字符编码问题,是编程中一类比较常见的,有比较棘手的问题,需要对于字符 有一定的理解,才能够从容应对

使用上下文管理器

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

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

 

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

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

相关文章

【MySQL】——数据定义

🎃个人专栏: 🐬 算法设计与分析:算法设计与分析_IT闫的博客-CSDN博客 🐳Java基础:Java基础_IT闫的博客-CSDN博客 🐋c语言:c语言_IT闫的博客-CSDN博客 🐟MySQL&#xff1a…

物流平台架构设计与实践

随着电商行业的迅猛发展,物流行业也得到了极大的发展。从最初的传统物流到现在的智慧物流,物流技术和模式也在不断的更新与升级。物流平台作为连接电商和物流的重要媒介,其架构设计和实践显得尤为重要。 一、物流平台架构设计 1. 前端架构设…

PyQt5零基础入门(十)——数字显示控件

前言 在PyQt中,可以使用QLCDNumber控件来显示数字。QLCDNumber控件是一个用于显示数字的小部件,模拟了真实的液晶数字显示屏。这个控件主要用于显示数字,如计时器、状态指示等。QSpinBox和QDoubleSpinBox是PyQt中用于输入和显示数字的控件。…

ele-h5项目使用vue3+vite+vant4开发:第四节、业务组件-SearchView组件开发

需求分析 展示切换动画搜索框输入文字&#xff0c;自动发送请求搜索结果展示搜索状态维护历史搜索展示&#xff0c;点击历史搜索后发送请求历史搜索更多切换动画效果 <script setup lang"ts"> import OpSearch from /components/OpSearch.vue import { ref } f…

React Hooks 学习笔记

1.useState&#xff08;&#xff09; 实现对页面数据的存储&#xff0c;当数据改变时候&#xff0c;自动触发render函数 2.useRef 用来解决两个问题&#xff1a; 1).是获取DOM元素或子组件的实例对象 2).存储渲染周期之间共享的数据 3.useEffect 4.useLayoutEffect 5…

IDEA 配置以及一些技巧

1. IDEA设置 1.1 设置主题 1.2 设置字体和字体大小 1.3 编辑区的字体用ctrl鼠标滚轮可以控制大小 1.4 自动导包和优化多余的包 1.5 设置编码方式 1.6 配置 maven 1.7 设置方法形参参数提示 1.8 设置控制台的字体和大小 注意&#xff1a;设置控制台字体和大小后需要重启IDEA才会…

90.网游逆向分析与插件开发-游戏窗口化助手-项目需求与需求拆解

内容参考于&#xff1a;易道云信息技术研究院VIP课 上一个内容&#xff1a;实现物品使用策略的功能-CSDN博客 项目需求&#xff1a; 在游戏窗口化时&#xff0c;可以在游戏之外弹出一个窗口&#xff0c;可以隐藏或者显示游戏窗口&#xff0c;显示游戏人物的基本状态&#xff…

【Springcloud篇】学习笔记九(十五、十六章):Cloud Alibaba介绍、Nacos服务注册、服务配置中心

第十五章_Cloud Alibaba简介 1.出现SpringCloud Alibaba的原因 SpringCloud Netflix项目进入维护模式 技术的发展 2.SpringCloud Alibaba简介 2.1是什么 2.2能干嘛 2.3去哪下 阿里巴巴中文文档下载网站&#xff1a; spring-cloud-alibaba/README-zh.md at 2022.x alibaba…

js获取文件名或文件后缀名(扩展名)的几种方法

有时候我们需要通过含有文件名和后缀名的一个字符串中提取出该文件的文件名或文件后缀名&#xff08;扩展名&#xff09;&#xff0c;可以通过如下几种方式进行截取。 例如文件名为: var fileName"12345.txt"; 方式一&#xff1a;subtring() 用法参考博文 【js截取字…

深度学习驱动下的自然语言处理进展及其应用前景

文章目录 每日一句正能量前言技术进步应用场景挑战与前景自然语言处理技术当前面临的挑战未来的发展趋势和前景 伦理和社会影响实践经验后记 每日一句正能量 一个人若想拥有聪明才智&#xff0c;便需要不断地学习积累。 前言 自然语言处理&#xff08;NLP&#xff09;是一项正…

查看自己电脑是arm还是x64(x86);linux操作系统识别

1、查看自己电脑是arm还是x64&#xff08;x86&#xff09; linux 参考&#xff1a; https://liuweiqing.blog.csdn.net/article/details/131783851 uname -a如果输出是 x86_64&#xff0c;那么你的系统是 64 位的 x86 架构&#xff08;通常我们称之为 x64&#xff09;。如果…

Jmeter 基于Docker 实现分布式测试

基于Docker 实现分布式测试 制作Jmeter基础镜像制作工作节点镜像启动工作节点启动控制节点遇到的问题 使用Docker 部署Jmeter非常方便&#xff0c;可以省略软件的安装以及配置&#xff0c;比如jdk、jmeter。需要部署多个工作节点可以节省时间。 控制节点&#xff08;Master-主节…

nodejs+vue+ElementU教师科研管理系统l33wm

本次开发一套高校教师科研管理系统有管理员&#xff0c;教师&#xff0c;学院三个角色。管理员功能有个人中心&#xff0c;教师管理&#xff0c;学院管理&#xff0c;科研课题管理&#xff0c;软件著作权管理&#xff0c;论文信息管理&#xff0c;专利信息管理&#xff0c;科研…

QXlsx Qt操作excel(1)

QXlsx 是一个用于处理Excel文件的开源C库。它允许你在你的C应用程序中读取和写入Microsoft Excel文件&#xff08;.xlsx格式&#xff09;。该库支持多种操作&#xff0c;包括创建新的工作簿、读取和写入单元格数据、格式化单元格、以及其他与Excel文件相关的功能。 关于QXlsx的…

[office] 在Excel2010中设定某些单元格数据不参与排序的方法介绍 #其他#知识分享#笔记

在Excel2010中设定某些单元格数据不参与排序的方法介绍 在Excel中排序&#xff0c;相信大家都会了&#xff0c;直接将一组数据按照从小到大或者从大到小进行排序&#xff0c;但是&#xff0c;现在要求我们规定其中几组数据不进行排序&#xff0c;只排序其余的部分。又该如何操作…

电源模块欠压保护点测试方法分享 纳米软件

电源欠压保护原理 欠压保护是指当电源电压低于一定值时&#xff0c;电源的保护功能会及时断开电路&#xff0c;避免设备受到损坏。电源欠压保护一般是通过一个或多个传感器来检测电压&#xff0c;当电压低于设定值时就会触发电源的保护功能&#xff0c;断开电路&#xff0c;保护…

树莓派-Ubuntu22.04

树莓派 1 安装Ubuntu系统2 ssh登录3 配置3.1 安装软件3.2 换源3.3 安装桌面3.4 开机脚本 1 安装Ubuntu系统 通过制作sdk&#xff0c;使系统在sdk中运行&#xff1a; 下载制作软件&#xff1a;https://www.raspberrypi.com/software/ 下载Ubuntu镜像&#xff1a;https://cn.ub…

Spring事件之注解@EventListener讲解

文章目录 1 注解EventListener1.1 示例Demo1.1.1 简单例子1.1.2 解耦1.1.3 Spring事件 1.2 深入EventListener1.2.1 debug调试1.2.2 问题一&#xff1a; Spring是怎么知道要去触发这个方法1.2.3 问题二&#xff1a;ApplicationListenerMethodAdapter1.2.4 问题三&#xff1a;Si…

(Python)列表字典数据本地存储工具

一个简单的实现简便 "列表字典" 数据存储本地。 适合不会SQL但又想实现数据存储本地的同学。 操作使用都非常简单。 文件只做了简单的加密处理&#xff0c;如果需要复杂加密的同学可以修改加密函数。 感兴趣并且动手能力强的同学&#xff0c;可以把它封装成工具类…

Linux Centos stream9 mdadm

RAID(Redundant Array of Independent Disk独立冗余磁盘阵列)技术是加州大学伯克利分校1987年提出&#xff0c;最初是为了组合小的廉价磁盘来代替大的昂贵磁盘&#xff0c;同时希望磁盘失效时不会使对数据的访问受损失而开发出一定水平的数据保护技术。RAID就是一种由多块廉价磁…