文件—python

news2024/9/23 9:28:22

一、文件编码

对于同一份文件,人的视角和计算机的视角是不相同的,人看到的是文字,计算机看到的0和1组成的编码。因为计算机只能识别0和1,无法直接识别文字,那我们是如何在电脑上看到文字的呢?

计算机按照一定的编码规则,将内容翻译成0和1存入存储设备中,程序需要读取的时候,将其调出,再翻译成文字,通过下图可以更加通俗地理解这个过程。

编码就是一种规则集合,记录了内容和二进制间进行相互转换的逻辑。 

计算机中有许多可用编码格式: UTF-8、GBK、Big5等,他们将内容翻译成二进制的方式是不同的。UTF-8是目前全球通用的编码格式,Windows系统自带的记事本中使用的就是UTF-8编码。

文件并不拘泥于文字形式,一张图片、一段视频、一个可执行程序,都可以被保存为一个文件。

文件可分为文本文件、视频文件、音频文件、图像文件、可执行文件等多种类别。

在日常生活中,文件操作主要包括打开、关闭、读、写等操作。

二、打开文件

使用open函数,可以打开一个已经存在的文件,或者创建一个新文件(即如果这个文件不存在,就会被创建)。

语法:open(name,mode,encoding)

name:是要打开的目标文件名的字符串(可以包含文件所在的具体路径)。

mode:设置打开文件的模式(访问模式):只读、写入、追加等。

encoding:编码格式(推荐UTF-8)

mode常用的三种基础访问模式:

模式含义如果目标文件不存在
r以只读方式打开文件,文件的指针将会放在文件开头。报错
w打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,原有内容会被删除。创建新文件进行写入。
a打开一个文件用于追加。如果该文件已存在,新的内容将会被写入到已有内容之后。创建新文件进行写入。

三、读文件

3.1 read()方法

语法:文件对象.read(num)

num表示要从文件中读取的数据的长度(单位是字节),如果没有传入num,则默认读取文件中所有的数据。

在与当前写代码文件的同一路径下,创建一个文件,内容为:apple,命名为test1.txt。

首先用open函数打开文件test1.txt,f作为open函数的文件对象(对象是Python中一种特殊的数据类型,拥有属性和方法),然后按照read()方法的语法访问字符。

示例代码1:

f=open('E:/Code-Python/0820/test1.txt','r',encoding='UTF-8')#此处要使用正斜杠'/',如果使用反斜杠'\'会被当成转义字符
content=f.read(2)
print(content)
content=f.read(1)
print(content)
content=f.read(2)
print(content)

输出:

ap
p
le

示例代码2:

f=open('test1.txt','r',encoding='UTF-8')#如果文件与当前代码在同一路径下,name处可直接用文件名
content=f.read()#没有传入num,默认读取文件中所有的数据
print(content)

输出:

apple

3.2 readline()方法

语法:文件对象.readline()

功能:一次读取一行内容

示例代码:

f=open('test1.txt','r',encoding='UTF-8')#如果文件与当前代码在同一路径下,name处可直接用文件名
content=f.readline()#读取一行数据
print(content)
content=f.readline()#读取一行数据
print(content)
content=f.readline()#读取一行数据
print(content)
content=f.readline()#读取一行数据
print(content)
content=f.readline()#读取一行数据
print(content)
content=f.readline()#读取一行数据
print(content)

输出:

虞美人·听雨

【宋】蒋捷

少年听雨歌楼上,红烛昏罗帐。

壮年听雨客舟中,江阔云低、断雁叫西风。

而今听雨僧庐下,鬓已星星也。

悲欢离合总无情,一任阶前、点滴到天明。

3.3 readlines()方法

语法:文件对象.readlines()

功能:按照行的方式把整个文件中的内容一次性全部读取,返回一个列表,其中每一行的数据为一个元素。

示例代码:

f=open('test1.txt','r',encoding='UTF-8')#如果文件与当前代码在同一路径下,name处可直接用文件名
content=f.readlines()
print(content)

输出:

['虞美人·听雨\n', '【宋】蒋捷\n', '少年听雨歌楼上,红烛昏罗帐。\n', '壮年听雨客舟中,江阔云低、断雁叫西风。\n', '而今听雨僧庐下,鬓已星星也。\n', '悲欢离合总无情,一任阶前、点滴到天明。']

注意:“\n”是换行符。

3.4 for循环读取文件行

代码示例:

for line in open('test1.txt','r',encoding='UTF-8'):
    print(line)#line临时变量记录了文件的一行数据

输出:

虞美人·听雨

【宋】蒋捷

少年听雨歌楼上,红烛昏罗帐。

壮年听雨客舟中,江阔云低、断雁叫西风。

而今听雨僧庐下,鬓已星星也。

悲欢离合总无情,一任阶前、点滴到天明。

四、写文件

电脑中的文件是保存在硬盘上的,但是我们在输入文件的数据时,输入一个字符之后并不是直接保存在硬盘上,而是先保存到内存的文件缓冲区中,文件缓冲区被装满之后,文件缓冲区的所有数据被一次性输入到硬盘上。(从硬盘中读取文件也是同理,此处无须深究。)这是因为从内存中向硬盘输入数据的消耗相对较大,一个字符一个字符地挨个传输效率较低。

4.1 write()方法

语法:文件对象. write(数据)

功能:写入数据(到文件缓冲区)

代码示例:

f=open('test2.txt','w',encoding='UTF-8')
f.write('Garfield')
time.sleep(50000)#睡眠5万秒,约为833分钟,验证write()方法是否写入数据(到文件缓冲区)

运行后查看文件目录,test2.txt本来不存在,open函数创建了这个新文件:

但是打开test2.txt,里面为空,看到了新文件的创建,说明代码确实运行了,证实了 write()方法将内容写入到了内存中,而非硬盘中。

4.2 flush()方法

语法:文件对象. flush()

功能:将内存缓冲区中的数据中写入硬盘

代码示例:

import time
#创建文件
f=open('test3.txt','w',encoding='UTF-8')
#写入数据
f.write('Garfield')
#内容刷新
f.flush()
#睡眠
time.sleep(50000)#睡眠5万秒,约为833分钟,验证write()方法是否写入数据(到文件缓冲区)

运行后查看文件目录,test3.txt本来不存在,open函数创建了这个新文件,f.write('Garfield')将Garfield写入到了内存中,f.flush()将Garfield写入到了硬盘中,所以我们在test3.txt看到了数据。

4.3 'w'模式与'a'模式

以‘w’模式写入文件,如果文件中已有内容,会被清除重新写入新的内容,如下所示:

在代码同路径下创建文件test4.txt,写入内容:加菲猫。

运行代码:

#打开文件
f=open('test4.txt','w',encoding='UTF-8')
#写入数据
f.write('欧迪')
#内容刷新
f.flush()

test4.txt中原有的内容被清空,只保存了新内容:欧迪。

'a'模式下,如果该文件已存在,新的内容将会被写入到已有内容之后。

在代码同路径下创建文件test5.txt,写入内容:加菲猫爱吃千层面。

运行代码:

#打开文件
f=open('test5.txt','a',encoding='UTF-8')
#写入数据
f.write('\n欧迪爱吃蛋糕')#\n帮助换行
#内容刷新
f.flush()

test5.txt中原有的内容依然保留,并且增加了新内容:欧迪爱吃蛋糕。

五、关闭文件

5.1 close()方法

语法:f.close()

功能:关闭文件对象,也就是关闭对文件的占用 (如果不调用close,同时程序没有停止运行,那么这个文件将一直被Python程序占用)。

close()方法还内置了flush功能

运行中(或被程序占用)的文件无法删除,我们可以利用这一点来验证一下:

f=open('test1.txt','r',encoding='UTF-8')
content=f.read()
print(content)
time.sleep(50000)

运行后打开文件目录,试去删除test1.txt,文件将一直被Python程序占用,无法删除。

使用close()方法后:

f=open('test1.txt','r',encoding='UTF-8')
content=f.read()
print(content)
f.close()
time.sleep(50000)

运行后打开文件目录,试去删除test1.txt,可以删除,说明文件test1.txt已经被解除占用。

5.2 with open ()方法

语法:

with open(name,mode,encoding) as f:

        语句块 

name:是要打开的目标文件名

mode:设置打开文件的模式(访问模式):只读、写入、追加等。

encoding:编码格式(推荐UTF-8)

功能:在with open的语句块中对文件进行操作 ,在操作完成后自动关闭close文件,避免遗忘掉close方法(可以理解为自带close关闭功能的open函数,plus版)

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

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

相关文章

C++的动态数组vector番外之capacity

今日诗词: 爱他明月好,憔悴也相关。 西风多少恨,吹不散眉弯。 ——《临江仙寒柳》【清】纳兰容若 目录 引言 正文 string中的和vector中的capacity有什么区别 vector扩容时内存分配的策略是什么? capacity在vector中的表现如…

基于无人机边沿相关 ------- IBUS、SBUS协议和PPM信号

文章目录 一、IBUS协议二、SBUS协议三、PPM信号 一、IBUS协议 IBUS(Intelligent Bus)是一种用于电子设备之间通信的协议,采用串行通信方式,允许多设备通过单一数据线通信,较低延迟,支持多主机和从机结构&a…

redis | Django小项目之Mysql数据库和Redis缓存的应用

Django小项目 需求整体架构图技术细节环境配置各文件配置settings.pyurls.pyviews.pyuser_update.html 结果相关代码补充r.hgetall(cacahe_key)new_data {k.decode():v.decode() for k,v in data.items()} 需求 整体架构图 技术细节 环境配置 django-admin startprojrct rmysi…

WIFI 应用层代码

1.0 定义枚举类型 typedef enum {WIFI_COMM_WAIT, // AT 等待命令WIFI_COMM_OK, // AT 命令完成WIFI_COMM_FALL, // AT 命令失败 }WifiCommState_t; 注:该枚举类型的作用是,定义三个成员变量,分别表示AT指令等待发送,AT指令…

unity游戏开发——(细)深入解析 Unity 地形系统:从基础到高级应用

Unity游戏开发 “好读书,不求甚解;每有会意,便欣然忘食。” 本文目录: Unity游戏开发 Unity游戏开发前言深入解析 Unity 地形系统:从基础到高级应用一、初识 Unity 地形系统1. 地形尺寸与分辨率 二、地形编辑工具详解1…

下拉菜单 匹配搜索

操作版本:Excel 2010 下拉菜单 涉及到的函数: INDIRECT函数:返回由文本字符串指定的引用 原文链接 一级下拉菜单 方法一:手动输入 选中要制作下拉菜单的单元格区域,单击【数据】-【数据有效性】-【序列】&#…

15.CentOS7升级内核

升级内核 1.配置镜像源 vim /etc/yum.repos.d/elrepo.repo[elrepo] nameelrepo baseurlhttps://mirrors.aliyun.com/elrepo/archive/kernel/el7/x86_64 gpgcheck0 enabled12.备份 cd /etc/yum.repos.d/ mv local.repo repo.bak/ 3.清缓存 yum clean all 4.升级内核 yum ins…

背部筋膜炎最好的恢复办法

背部筋膜炎是由于寒冷、精神紧张、潮湿或慢性劳损等因素造成的背部肌筋膜和肌组织发生水肿、纤维变性和渗出,其主要症状包括: 1、疼痛:患者通常会出现背部疼痛,这种疼痛在着凉或劳累时可能会加重。晨起时疼痛可能尤为明显&#x…

将两对象(重复属性不替换)合并成一个对象

将这两个对象合并成一个对象 const obj1 {"configType": "all","config": {"a":1} };const obj2 {"target_cluster": "dev-0821","type": "import","config": {"connector…

攻防世界-web题型-4星难度汇总-个人wp

Confusion1 进入页面查看源代码,发现有两个提示 访问第一个源码里面有个 /opt/flag_1de36dff62a3a54ecfbc6e1fd2ef0ad1.txt /opt/salt_b420e8cfb8862548e68459ae1d37a1d5.txt 不过我发现好像是只要访问404页面都有这两个。。。 另外这两个admin和login页面都没用…

如何把照片转换成PDF格式?分享3种好用的PDF转换方法

在数字化的时代中,各种格式的文件已经是我们平时办公中不可或缺的一部分,其中尤其是以图片、PDF这两种文件使用的最多,图片能够更加直观的表现内容,而PDF文档因其稳定性、兼容性等特性,也在办公中有独特的优势&#xf…

Pandas DataFrame的创建方法(Create DataFrame)

pandas是一个第三方数据分析库,其集成了大量的数据模型和分析工具,可以方便的处理和分析各类数据。其中主要对象类型有Series,DataFrame和Index。本文介绍DataFrame对象的基本创建方法。 关于DataFrame的基础用法,可以查看下面的…

随机生成n个字节os.urandom(n)

【小白从小学Python、C、Java】 【考研初试复试毕业设计】 【Python基础AI数据分析】 随机生成n个字节 os.urandom(n) [太阳]选择题 下列输出结果中正确的是? import os print("【执行】a os.urandom(2)") a os.urandom(2) print("【显示】a ", a) pri…

【Qt】输入类控件QDail

目录 输入类控件QDail 例子:调整窗口不透明度 输入类控件QDail 使用QDail表示一个旋钮,通过鼠标拖动旋钮可以完成一些相关的属性。 核心属性 属性说明 value 持有的数值. minimum 最⼩值 maximum 最⼤值 singleStep 按下⽅向键的时候改变的步⻓…

【Java数据结构】---二叉树OJ

乐观学习,乐观生活,才能不断前进啊!!! 我的主页:optimistic_chen 我的专栏:c语言 ,Java 欢迎大家访问~ 创作不易,大佬们点赞鼓励下吧~ 文章目录 相同的树另一颗树的子树翻…

与copilot 结对编程系列 - log日志重复性检测 - 第4篇 - 网页UI界面

背景 细节可以参考这篇文章: 与copilot 结对编程系列 - log日志重复性检测 - 第1篇 - 总体介绍及效果展示 本文主要将数据库中存储的数据通过网页调用并展示出来, 以下是对详细解释。 web框架选择 当前场景使用 Flask 来展示网页信息. 主要原因如下: 轻量级和易…

如何使用JavaScript获取HTML表单中的值?

在开发中,我们经常需要获取用户在表单中输入的数据,然后进行处理或提交到服务器。今天我们就来聊一聊,如何用JavaScript获取HTML表单中的值。 使用 FormData 构造函数 FormData 是一个非常方便的工具,它可以把表单中的所有数据打包…

C++,std::chrono 详解

文章目录 1. 概述2. 时间点(Time Points)3. 时间间隔(Durations)4. 时钟(Clocks)5. 时间算术6. 时间转换7. 延时参考 1. 概述 std::chrono 是 C11 引入的一个库,用于处理日期和时间。它提供了一…

Unsloth 教程 - 如何微调 Llama-3并导出到 Ollama

本文翻译整理自:🦙 How to Finetune Llama-3 and Export to Ollama https://docs.unsloth.ai/tutorials/how-to-finetune-llama-3-and-export-to-ollama 文章目录 1、什么是Unsloth?2、什么是Ollama?3、安装Unsloth4、选择要微调的…

博弈论总结

公平组合游戏(Impartial Game)的定义如下: 游戏有两个人参与,二者轮流做出决策,双方均知道游戏的完整信息; 任意一个游戏者在某一确定状态可以作出的决策集合只与当前的状态有关,而与游戏者无关…