Python --- 文件操作

news2025/1/11 4:20:50

目录

前言

一、open()函数

1.只读模式 r

2.只写模式 w

3.追加模式 a

二、操作其他文件

1.Python 操作二进制

2.Python 操作 json 文件

三、关闭文件

四、上下文管理器

五、文件指针位置


前言

在实际操作中,通常需要将数据写入到本地文件或者从本地文件中读取数据等操作,那么作为 Python 爱好者的我们,必须掌握用 Python 语言去对本地文件进行操作。

本地文件操作步骤:

  1. 找到文件所在位置
  2. 打开文件
  3. 操作文件
  4. 关闭文件

一、open()函数

file:打开的文件位置(路径)
mode:指定操作文件的权限(默认只读权限)
encoding:指定编码utf-8,解决中文乱码的问题

文件的模式

模式说明指针初始位置如果文件不存在
r以只读的方式打开文件文件开头报错
w打开一个文件写入内容。注意:这种模式是从头写入,会覆盖之前已有的内容文件开头创建
a与w一样是写入文件。不同之处在于它不是从头写入,而是在已有文件后面接着写文件结尾创建
x若文件已存在则报错,若文件不存在则会新建再写入,比w模式安全创建
b以bytes类型操作文件,一般与之前的模式结合使用
rb和r基本相同,不同之处在于以二进制的格式打开文件文件开头报错
wb和w基本相同,不同之处在于以二进制的格式打开文件文件开头创建
ab和a基本相同,不同之处在于以二进制的格式打开文件文件结尾创建

除此之外还有它们分别对应的r+、w+、a+、rb+、wb+,ab+,不同之处在于这几种都是可读可写的操作,详细内容请读者自己去尝试。

1.只读模式 r

方法描述
f.readable()判断是否可读
f.read(n)

读取全部,在python中n为字符

n可以自己设置读取内容的多少,不设置或者设置为负值,则读取全部内容。

f.readline()逐行读取,包括\n
f.readines读取所有,返回值为列表,包括\n

data.txt

hello
world
cheng xu yuan

(1)f.readable()

判断是否可读,返回布尔值

f = open('data.txt', mode='r', encoding='utf-8')
if f.readable():
    print('可读')
else:
    print('不可读')

运行结果:

(2)f.read(n)

这里n可以自己设置读取内容的多少,不设置或者设置为负值,则读取全部内容。

if f.readable():   
    f = open('data.txt', mode='r', encoding='utf-8')
    print(f.read(8))

 运行结果:

(3)f.readline()

从文件中读取一行内容,换行符是‘\n’,重复输入此命令是从下一行开始读取。

if f.readable():
    f = open('data.txt', mode='r', encoding='utf-8')
    print(f.readline(), end='')
    print(f.readline(), end='')

运行结果:

仔细观察我们可以发现,打印一次f.readline(),它只输出一行,并且指针移到了下一行开头。最后一行输出的是空字符,说明指针到了文件结尾,并且不会自动回到开头。

每输出一行内容,它会自动输出一个\n。我们可以再后面加上end=’’,意思就是它默认的结尾是‘\n’,我们把它改成空字符。

(4)f.readlines()

将文件中每一行作为一个元素,保存在一个列表中,返回的值就是这个列表。它会将文件中的全部内容一次性读入列表,有一个好处就是取用内容十分方便。

if f.readable():
    f = open('data.txt', mode='r', encoding='utf-8')
    print(f.readlines())

运行结果:

注意:

  • r模式,当文件不存在时则报错
  • 读取不可逆

2.只写模式 w

方法描述
f.writable()判断是否可写
f.write(str)写入内容,返回值为写入字符串的长度
f.writelines(seq)写入多行,但需要自己添加换行符

(1)f.write(str)

用于将字符串或者byte类型的数据写入文件。该命令可以多次重复,但只是在计算机内存中操作,只有关闭了文件(with语句中不需要)才会保存到硬盘中。

with open('data.txt',mode='w',encoding='utf-8') as file:
    f = (file.write('很美'))

print(type(f),f,sep='\n')

with open('data.txt',mode='r',encoding='utf-8') as file:
    print(file.read())

 运行结果:

注意:

  • w模式,当文件不存在时创建文件
  • 再次写入时为覆盖

3.追加模式 a

注意:

  • a模式,当文件不存在时创建文件
  • 再次写入为追加

4.b

b模式

  • 二进制模式:一般用于读取图片、视频等文件

  • 注意:读写时是以bytes类型读写的,因此获得是一个bytes对象而不是字符串,读写时需要指定字符编码

s='this is a test'
b=bytes(s,encoding='utf-8')
f=open('t2.txt','w')
f.write(s)
f.write(b)

s='this is a test'
b=bytes(s,encoding='utf-8')
f=open('t3.txt','wb')  # wb 用于bytes类型
f.write(b)
f.close()

5.+

  • w+模式:在读写之前会清空文件内容

  • a+模式:永远在文件尾部写入

  • r+模式:读写模式,配合seek()tell()方法可以实现更多操作

二、操作其他文件

1.Python 操作二进制

在 Python 中,使用 wb 模式,写入二进制数据。

2.Python 操作 json 文件

方法描述
json.loads()json 转为 字典(适用于语句)
json.dumps()字典转为 json (适用于语句)
json.load()json 转为字典(适用于文件)
json.dump()字典转为json(使用于文件)

三、关闭文件

需要注意的是,当文件打开之后,必须通过 f.close() 语句来关闭文件,释放资源。

四、上下文管理器

with 关键字用于 Python 的上下文管理器机制。为了防止诸如 open 这一类文件打开方法在 操作过程出现异常或错误,或者最后忘了执行 close 方法,文件非正常关闭等可能导致文件泄 露、破坏的问题 。Python 提供了 with 这个上下文管理器机制,保证文件会被正常关闭。在 它的管理下,不需要再写 close 语句。其余操作都同 open() 一致。

f = open('data.txt', 'w')
f.write("cheng xu")
f.close()  # 关闭文件

 使用上下文管理器:

with open('data.txt', 'w') as f:
    f.write("cheng xu")

五、文件指针位置

在文件读写的操作过程中,我们发现文件的指针是会根据我们的打开方式、以及读写命令的执行,有一个固定的位置,这样使用起来不能够随心所欲,那么我们就需要能够自己掌握指针的位置。

方法描述
f.tell()文件所处位置
f.seek(offset,whence)

1.tell()

返回文件读写指针当前所在的位置,这个位置是从文件开头算起的 字节数 ,而不是字符数。

with open('data.txt',mode='w',encoding='utf-8') as file:
    file.write('你好')
    print(file.tell())
    file.write('呀')
    print(file.tell())

运行结果:

从这里我们也可以发现:汉字占用三个字节。

2.f.seek(offset,whence)

用于指定指针的位置。它有两个参数,先介绍第二个参数whence,它有三个固定的选项,分别是0、1、2

whence
0从文件首开始偏移
1从当前所在位置开始偏移
2从文件末尾开始偏移

第一个参数是偏移量,就是需要从所选位置移动偏移的字节数,很容易理解。请看示例:(在‘你好’中间插入字符‘们’)

with open('data.txt',mode='r+',encoding='utf-8') as file:
    file.write('你好')
    file.seek(0, 0)
    print(file.read())
    file.seek(3, 0)
    old=file.read()
    file.seek(3, 0)
    file.write('们')
    file.write(old)
    file.seek(0, 0)
    print(file.read())

运行结果:

 

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

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

相关文章

南方猛将加盟西方手机完全是臆测,他不会希望落得兔死狗烹的结局

早前南方某科技企业因为命名的问题闹得沸沸扬扬,于是一些业界人士就猜测该猛将会加盟西方手机,对于这种猜测可以嗤之以鼻,从西方手机以往的作风就可以看出来它向来缺乏容纳猛将的气量。一、没有猛将的西方手机迅速沉沦曾几何时,西…

【项目】bxg基于SaaS的餐掌柜项目实战(2023)

基于SaaS的餐掌柜项目实战 餐掌柜是一款基于SaaS思想打造的餐饮系统,采用分布式系统架构进行多服务研发,共包含4个子系统,分别为平台运营端、管家端(门店)、收银端、小程序端,为餐饮商家打造一站式餐饮服务…

如何用ChatGPT翻译?ChatGPT提升翻译速度,亲测有效

作为翻译新手,你是否为翻译不准确不地道而烦恼? 随着ChatGPT的大火,很多聪明的翻译已经开始使用ChatGPT辅助自己提升翻译能力和速度了。 想用ChatGPT翻译,首先要知道在哪里可以使用ChatGPT!在国内选择不用注册不用登录…

python实现批量生成带内容的文件夹

我工作的时候经常遇到这个问题:需要批量生成带内容的文件夹来辅助工作。 我有8种不同名字的文件夹 每个文件夹下面都有以日期命名的文件夹 日期文件夹里面会记录我当天需要记录的东西。 我需要实现的功能是: 1.输入一个天数N,生成N天以前…

机器学习 day05(多元线性回归,向量化)

单个特征(变量)的线性回归模型 房子的价格仅由房子的大小决定,如图: 多个特征(变量)的线性回归模型 房子的价格由房子的大小,房子有多少个卧室,房子有几层,房子住了多…

代码随想录|day44|动态规划part06● 完全背包● 518. 零钱兑换 II ● 377. 组合总和 Ⅳ

完全背包 理论基础 视频:带你学透完全背包问题! 和 01背包有什么差别?遍历顺序上有什么讲究?_哔哩哔哩_bilibili 链接:代码随想录 //先遍历背包还是先遍历物品是没有影响的。可以和01背包保持一致,都先遍历…

vue-自定义指令

需求1:定义一个v-big指令,和v-text功能类似,但会把绑定的数值放大10倍。 需求2:定义一个v-fbind指令,和v-bind功能类似,但可以让其所绑定的input元素默认获取焦点。 语法: 局部使用&#xff…

【硬件外设使用】——I2C

【硬件外设使用】——I2CI2C基本概念I2C通信协议I2C使用方法pyb.i2cmachine.i2cI2C可用的传感器I2C基本概念 I2C是"Inter-Integrated Circuit"的缩写,也被称为TWI (Two Wire Interface)。 它是一种串行通信协议,用于连接多个设备或组件。 I2…

记一次idea+Dockerfile+docker部署

软件版本:idea:2021.3,docker:19.03.9,服务器:centos7.8 1.centos7服务器配置 在服务器上编辑docker文件 vi /usr/lib/systemd/system/docker.service修改以ExecStart开头的行 ExecStart/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/ru…

计算机视觉基础__图像特征

计算机视觉基础__图像特征 本篇目录: 一、前言 二、位图和矢量图概念 三、图像的颜色特征 四、RGB 颜色空间 五、HSV 颜色空间 六、HLS 颜色空间 七、实例代码 八、参考资料 一、前言 传统图像处理,需要找出图片中的关键特征,然后对这…

30天学会《Streamlit》(5)

30学会《Streamlit》是一项编码挑战,旨在帮助您开始构建Streamlit应用程序。特别是,您将能够: 为构建Streamlit应用程序设置编码环境 构建您的第一个Streamlit应用程序 了解用于Streamlit应用程序的所有很棒的输入/输出小部件 第6天 - 将…

GO变量的使用

Go变量的使用注意事项 (1)第一种:指定了变量类型,但是声明后若不赋值,则使用默认值 (2)第二种:根据值自行判断我们的变量类型**(类型推导)** var num10.00 …

Python ---> 衍生的数据技术

我的个人博客主页:如果’真能转义1️⃣说1️⃣的博客主页 关于Python基本语法学习---->可以参考我的这篇博客:《我在VScode学Python》 随着人工智能技术的发展,挖掘和分析商业运用大数据已经成为一种推动应用, 推动社会发展起着…

接口优化方案

前言 最近随着国产化热潮,公司的用于营业的电脑全部从windows更换成了某国产化电脑,换成国产化之后,我们系统的前台web界面也由之前的jsp页面重构成vue.所以之前的一体式架构也变成了前后端分离的架构。但是在更换过程后,发现一些…

蓝绿部署技术方案

文章目录 ngx_lua介绍Nginxluangx_lua模块的原理:ngx_lua 模块执行顺序与阶段ngx_lua应用场景 JWTnginx镜像构造lua-redis蓝绿部署特性注意:蓝绿部署架构图nginx配置服务脚本部署使用职责分工 ngx_lua介绍 Nginx Nginx是Web服务器、HTTP反向代理和TCP代…

apache+tomcat实现动静分离和负载均衡

文章目录 ApacheTomcat整合环境通过JK实现动静分离编译mod_jk.so创建测试页面配置jk模块启动apache和tomcat测试。 ApacheTomcat负载均衡配置测试页配置mod_jk文件配置worker.properties测试 ApacheTomcat整合 Tomcat作为一个Servlet容器,可以用于运行Java Web应用…

Unity之c#专题篇——【不动如山核心章】

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:uni…

连接VPN后无法上网 Windows Route 轻松解决

连接VPN后无法上网 Windows Route 轻松解决 引言文档添加路由 引言 很多时候,我们公司的 VPN 为了不占用公司的外网带宽和安全起见,都会禁止访问外网。我们的电脑连接 VPN 后,所有的网络数据包都会走 VPN,从而导致我们无法访问互…

ES集群配置和分词器(九)

一直在坑自己家人,对,说的就是你,大A. 上一章简单介绍了SpringBoot整合 EasyES (八), 如果没有看过,请观看上一章 一. Windows 集群部署 一.一 服务复制 将 es 复制3份 一.二 配置文件配置 每个服务节点的 config/eslsticsearch.yml 配置…

AANet: CTPA图像中肺动脉栓塞检测的动脉感知网络

AANet: Artery-Aware Network for Pulmonary Embolism Detection in CTPA Images 摘要 肺栓塞(PE)是危及生命的疾病,计算机断层肺血管造影(CTPA)是临床上最好的诊断技术 然而,在CTPA图像中,PE通常表现为血液动脉明亮区域中的黑点&#xff0…