Python - 文件基础操作

news2025/3/13 7:16:49

目录

文件的读取

open()打开函数

read类型

read()方法

readlines()方法

readline()方法

for循环读取文件行

close() 关闭文件对象

with open 语法

文件的写入

文件的追加


文件的读取

操作

功能

文件对象 = open(file, mode, encoding)

打开文件获得文件对象

文件对象.read(num)

读取指定长度字节

不指定num读取文件全部

文件对象.readline()

读取一行

文件对象.readlines()

读取全部行,得到列表

for line in 文件对象

for循环文件行,一次循环得到一行数据

文件对象.close()

关闭文件对象

with open() as f

通过with open语法打开文件,可以自动关闭

open()打开函数

open(name, mode, encoding)
  • name:是要打开的目标文件名的字符串(可以包含文件所在的具体路径)。
  • mode:设置打开文件的模式(访问模式):只读(r)、写入(w)、追加(a)等。
  • encoding:编码格式(推荐使用UTF-8)

方法如下: 

f = open("A:/1223.txt", "r", encoding="UTF-8")
print(type(f))

 <class '_io.TextIOWrapper'>

补充: 

模式

描述

r

以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。

w

打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,原有内容会被删除。

如果该文件不存在,创建新文件。

a

打开一个文件用于追加。如果该文件已存在,新的内容将会被写入到已有内容之后。

如果该文件不存在,创建新文件进行写入。

read类型

read类型函数读取文件时会有默认的指针下标指向开始位置,指针随着读取数据的单位移动;当对同一个文件调用多次read类型函数,读取开始位置为上一个函数读取结束的位置

也就是说,read类型函数会默认对文件读取进度记录,如果第一次读了10个字节的内容,那么第二次调用则从第11个字节的位置开始读取;

测试

将如上图内容的文件存入A盘 

read()方法

文件对象.read(num)

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

f = open("A:/1223.txt", "r", encoding="UTF-8")
# 读取文件 - read()
print(f"第一次读取16个字节的结果:{f.read(16)}")
print(f"第二次读取16个字节的结果:{f.read(16)}")
print(f"第三次读取16个字节的结果:{f.read(16)}")
print(f"read方法读取全部内容的结果是:\n{f.read()}")
print("-----------------------------------------------")

第一次读取16个字节的结果:浔阳江头夜送客,枫叶荻花秋瑟瑟

第二次读取16个字节的结果:主人下马客在船,举酒欲饮无管弦

第三次读取16个字节的结果:醉不成欢惨将别,别时茫茫江浸月

read方法读取全部内容的结果是:
忽闻水上琵琶声,主人忘归客不发
寻声暗问弹者谁,琵琶声停欲语迟
-----------------------------------------------

readlines()方法

readlines可以按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为一个元素。

# 读取文件 - readLines()
lines = f.readlines()   # 读取文件的全部行,封装到列表中
print(f"lines对象的类型:{type(lines)}")
print(f"lines对象的内容是:{lines}")

lines对象的类型:<class 'list'>
lines对象的内容是:['浔阳江头夜送客,枫叶荻花秋瑟瑟\n', '主人下马客在船,举酒欲饮无管弦\n', '醉不成欢惨将别,别时茫茫江浸月\n', '忽闻水上琵琶声,主人忘归客不发\n', '寻声暗问弹者谁,琵琶声停欲语迟\n']
 

readline()方法

一次读取一行内容

# 读取文件 - readline()
line1 = f.readline()
line2 = f.readline()
line3 = f.readline()
print(f"第一行数据是:{line1}")
print(f"第二行数据是:{line2}")
print(f"第三行数据是:{line3}")

第一行数据是:浔阳江头夜送客,枫叶荻花秋瑟瑟

第二行数据是:主人下马客在船,举酒欲饮无管弦

第三行数据是:醉不成欢惨将别,别时茫茫江浸月

for循环读取文件行

遇到转行符则执行语句

语句转换为字符串类型<class 'str'>  

# for循环读取文件行
for line in f:
    print(f"每一行数据是:{line}")

每一行数据是:浔阳江头夜送客,枫叶荻花秋瑟瑟

每一行数据是:主人下马客在船,举酒欲饮无管弦

每一行数据是:醉不成欢惨将别,别时茫茫江浸月

每一行数据是:忽闻水上琵琶声,主人忘归客不发

每一行数据是:寻声暗问弹者谁,琵琶声停欲语迟

close() 关闭文件对象

最后通过close,关闭文件对象,也就是关闭对文件的占用

如果不调用close,同时程序没有停止运行,那么这个文件将一直被Python程序占用。

f = open("python.txt", "r")

f.close()

with open 语法

通过在with open的语句块中对文件进行操作

可以在操作完成后自动关闭close文件,避免遗忘掉close方法 

with open("python.txt", "r") as f:
    f.readlines()

文件的写入

注意:

  • 直接调用write,内容并未真正写入文件,而是会积攒在程序的内存中,称之为缓冲区
  • 当调用flush的时候,内容会真正写入文件
  • 这样做是避免频繁的操作硬盘,导致效率下降(攒一堆,一次性写磁盘)

文件如果不存在,使用”w”模式,会创建新文件 

f = open("A:/666.txt", "w", encoding="UTF-8")
# # write写入
f.write("Hello World!!!")       # 内容写入到内存中
# # flush刷新
f.flush()                       # 将内存中积攒的内容,写入到硬盘的文件中
# # close关闭
f.close()                       # close方法,内置了flush的功能的

文件如果存在,使用”w”模式,会将原有内容清空

# # 打开一个存在的文件
f = open("A:/666.txt", "w", encoding="UTF-8")
# write写入、flush刷新
f.write("雷猴")
# close关闭
f.close()

文件的追加

注意:

a模式,文件不存在会创建文件

# 打开文件,不存在的文件
f = open("A:/777.txt", "a", encoding="UTF-8")
# write写入
f.write("嘿嘿嘿")
# flush刷新
f.flush()
# close关闭
f.close()

 A盘出现777.txt文件

a模式,文件存在会在最后,追加写入文件

# 打开一个存在的文件
f = open("A:/777.txt", "a", encoding="UTF-8")
# write写入、flush刷新
f.write("\n嘻嘻嘻")
# close关闭
f.close()

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

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

相关文章

C语言学习笔记(六): 探索函数与变量

函数的定义 形参和实参 在定义函数时函数名后面括号中的变量名称为“形式参数”&#xff08;简称“形参”&#xff09;或“虚拟参数”。 在主调函数中调用一个函数时&#xff0c;函数名后面括号中的参数称为“实际参数”&#xff08;简称“实参”&#xff09;。 当函数被调用…

独自开:提供创业机会、享受平台分红、推出新颖赚钱副业

&#x1f497;wei_shuo的个人主页 &#x1f4ab;wei_shuo的学习社区 &#x1f310;Hello World &#xff01; 前言 独自开&#xff1a;一款聚焦软件定制开发&#xff0c;独立、自主、开放平台 独创分层标准化平台架构,满足系统不断生长的个性化需求多端一键部署前端业务交互与展…

KMP算法详解

注意&#xff1a;PC阅读效果更佳&#xff0c;建议阅读的同时完成代码实践加深理解一、问题描述指定文本串&#xff1a;aabaabaaf和模式串&#xff1a;aabaaf使用KMP算法判断模式串是否在文本串中出现过&#xff1f;假定模式串的长度小于文本串二、思路解析BF算法的问题是&#…

【pytorch安装】conda安装pytorch无法安装cpu版本(完整解决过程)

问题描述 在安装pytorch过程中&#xff0c;发现最后验证torch时总是返回结果为False&#xff0c;结果翻上去发现自己安装的是cpu版本的。 然后又通过conda去更换不同版本尝试&#xff0c;发现都是cpu版本的。 问题分析 通过conda安装pytorch是从源中搜索匹配指令中的文件&am…

@Validated注解不生效问题汇总

Validated注解不生效问题汇总 文章目录Validated注解不生效问题汇总背景&#xff1a;一&#xff1a;可能原因原因1&#xff1a;原因2&#xff1a;原因3&#xff1a;原因4&#xff1a;二&#xff1a;补充全局异常对validation的处理背景&#xff1a; 项目框架应用的是validatio…

捕鱼大作战协议解密

捕鱼大作战协议解密协/议/流/量/解/密分析捕鱼大作战这款游戏流量的加密方式及解密方法。序捕鱼大作战是tuyoo公司在很多年前上线的一款休闲游戏&#xff0c;对&#xff0c;就是那个之前本号批斗过的途游&#xff0c;这款游戏以海洋深处作为背景&#xff0c;玩家通过在海底施展…

D31 Vue2 + Vue3 K104-K123

D31.Vue F17.打包 图片懒加载&#xff08;K104-K106&#xff09; 1.打包 1&#xff09;vue.config.js module.exports {//打包时不生成map文件(用来进行错误提示的文件&#xff0c;很占用空间)productionSourceMap: false,// 关闭ESLINT校验工具lintOnSave: false, }pnp…

学完Scrapy-Splash秒变爬虫大佬

在做爬虫的时候&#xff0c;大多数的网页中会存在数据动态加载的部分&#xff0c;而且多数都是后期渲染上的。正常情况下爬虫程序仅能爬取被渲染过的数据。因此我们看到的数据也许并非是爬虫直接获取来的。 而scrapy-splash担任了一个中间人的角色&#xff0c;程序通过splash服…

吴思进——复杂美创始人首席执行官

杭州复杂美科技有限公司创始人兼CEO, 本科毕业于浙江大学机械专业&#xff0c;辅修过多门管理课程&#xff1b;1997年获经济学硕士学位&#xff0c;有关对冲基金的毕业论文被评为优秀&#xff1b;2008年创办杭州复杂美科技有限公司。 吴思进 中国电子学会区块链委员会专家&…

计算机网络-基本概念

目录 计算机网络-基本概念 互联网 Java的跨平台原理 ​编辑 C\C的跨平台原理 解释性语言的跨平台原理(python,js等) 客户端 vs 服务器 什么是协议&#xff1f; 网络互连模型 请求过程 计算机之间的通信基础 计算机之间的连接方式-网线直连(需要用交叉线&#xff0c;而…

GIS数据经纬度投影坐标转换总结(涵盖几乎全行业的坐标转换方法)

在处理GIS数据的过程中,避免不了要与坐标和坐标系打交道。这篇文章对能够进行地理坐标转换的所有软件框架做一个一次性总结。 软件类: 1.arcgis arcgis能够进行很全面的很方便的坐标处理,无论是经纬度坐标转投影坐标还是投影坐标转经纬度坐标都非常的简单。arcgis能够对导…

Qt编写视频监控系统70-0SD标签和图形信息(支持写入到文件)

一、前言 作为一个完整的视频监控系统&#xff0c;用户还需要自定义一些OSD标签信息显示在对应通道上面&#xff0c;而且不止一个OSD标签信息&#xff0c;位置可以在四个角或者指定坐标显示。最开始本系统设计的时候&#xff0c;由于本人擅长的是painter绘制&#xff0c;所以直…

MySQL视图特性

文章目录MySQL视图特性基本使用准备测试表创建视图修改视图影响基表修改基表影响视图删除视图视图规则和限制MySQL视图特性 视图的概念 视图是一个虚拟表&#xff0c;其内容由查询定义&#xff0c;同真实的表一样&#xff0c;视图包含一系列带有名称的列和行数据。视图中的数据…

opencv读取摄像头和视频数据

大家好&#xff0c;我是csdn的博主&#xff1a;lqj_本人 这是我的个人博客主页&#xff1a; lqj_本人的博客_CSDN博客-微信小程序,前端,python领域博主lqj_本人擅长微信小程序,前端,python,等方面的知识https://blog.csdn.net/lbcyllqj?spm1011.2415.3001.5343哔哩哔哩欢迎关注…

TensorRT和DLA(Deep Learning Accelerator)

TensorRT和DLA(Deep Learning Accelerator) 点击此处加入NVIDIA开发者计划 文章目录TensorRT和DLA(Deep Learning Accelerator)12.1. Running On DLA During TensorRT Inference注意&#xff1a;对于任何张量&#xff0c;索引维度的总体积加上请求的批量大小不得超过此函数返回…

Docker 面试知识点

Docker 是什么&#xff1f; 是实现容器技术的一种工具是一个开源的应用容器引擎使用 C/S 架构模式&#xff0c;通过远程API 来管理 (我们本机是 C&#xff0c;docker 引擎是 S,实际的构建过程是在 docker 引擎下完成的)可以打包一个应用及依赖包到一个轻量级、可移植的容器中 …

Hbase 数据迁移

Hbase 数据迁移 可选方案对比 l 已验证方案操作说明&#xff1a; n Export&import u 导出命令及示例 hbase org.apache.hadoop.hbase.mapreduce.Export “表名” 文件路径 导出至本地文件系统&#xff1a; ./bin/hbase org.apache.hadoop.hbase.mapreduce.Export ‘defa…

UnityBurst系统批量计算的插件入门

什麽是Burst系統做一些批量計算需要&#xff0c;比较难用&#xff0c;针无两头利如果不需要“密集”计算&#xff0c;就帧的不需要&#xff0c;到底什么是密集计算呢&#xff0c;for循环不密集么&#xff0c;while循环不密集么&#xff1f;安装Burst因为发现一个不错项目的插件…

Zookeeper实现分布式锁

文章目录ZK节点类型watch监听机制Zookeeper实现分布式锁锁原理创建锁的过程释放锁的过程ZK锁的种类代码实现Zookeeper是一个开源的分布式协调服务&#xff0c;是一个典型的分布式数据一致性解决方案。 分布式应用程序可以基于Zookeeper实现诸如数据发布/订阅&#xff0c;负载均…

【C/C++基础练习题】简单指针与数组使用练习题

&#x1f349;内容专栏&#xff1a;【C/C要打好基础啊】 &#x1f349;本文内容&#xff1a;简单指针与数组练习题&#xff08;复习之前写过的实验报告&#xff09; &#x1f349;本文作者&#xff1a;Melon西西 &#x1f349;发布时间 &#xff1a;2023.2.12 目录 1.vector​编…