18 Python如何操作文件?
本篇是 Python 系列教程第 18 篇,更多内容敬请访问我的 Python 合集
1 打开文件
通常使用内置的 open(文件路径, 模式, encoding="utf-8")函数。
- 文件路径:可以是相对路径或绝对路径。
- 模式:(可选)决定了文件打开后如何处理文件。
- encoding:(可选)编码方式。
常见的模式有:
- 'r' (默认):只读模式,如果文件不存在,则会引发 FileNotFoundError。
- 'w':写入模式,如果文件存在则会清空内容再写入,如果文件不存在则创建新文件。
- 'a':追加模式,在文件末尾追加内容,如果文件不存在则创建新文件。
- 'b':二进制模式,用于处理二进制文件(如图像、音频等)。
- '+':更新模式,用于同时进行读写操作。
可以将这些模式组合起来使用,例如:
- 'rb':以二进制模式读取文件。
- 'wb':以二进制模式写入文件。
- 'ab':以二进制模式追加内容到文件。
- 'r+':读写模式,可以读取和写入文件。
- 'w+':写入并读取模式,先写入后读取。
- 'a+':追加并读取模式,先追加后读取。
2 文件读取
如果open()函数执行成功,会返回一个文件对象。后续可以对这个对象进行读取或写入操作。
f = open('./data.txt', 'r', encoding='utf-8')
文件对象有个read()方法,会一次性读取文件里的所有内容,并返回字符串格式。
实例:
file = open('data.txt', 'r', encoding="utf-8")
print(file.read())
注意:
- 如果调用过
read()后再次调用,会返回空,因为程序会记录文件被读取的位置,第一次read()时已经读到文件末尾,第二次read()后面就没有内容了。 - 大文件也不适合用
read(),因为会一次性读取文件的所有内容,可能挤爆内存。
上面说大文件不适合用read(),那有别的替换方案吗?当然有,解决方案就是一次性只读取部分内容,如:
- 给
read()传一个数字参数如read(1024),表示一次读多少字节,下次再调用read(1024)时就会继续从上次的结束位置读取。 - 使用
readline(),此方法一次只会读取一行内容,是根据换行符来判断本行结尾的,而且换行符也会被当做内容的一部分被读取。
上面的两种方式可搭配while循环来用,另外还有一个readlines()方法,会一次性返回所有行,组成一个字符串列表,一般搭配for循环使用。
3 文件写入
调用open()函数时第二个参数传w或a就可以进行文件写入操作。这里说明一点,如果第二个参数是r,且文件不存在就会报FileNotFoundError错误,但是w或a就不会报错,它会自动创建一个文件。
在打开或创建文件之后就可以调用文件对象的write()方法进行写入操作了。
示例:
with open('data.txt', 'w', encoding="utf-8") as file:
file.write("hello ")
file.write("python")
data.txt内容:
hello python
注意write()方法并不会自动换行,需要手动添加换行符,如把代码改成file.write("hello\n"),data.txt就会变成:
hello
python
如果我们使用w模式,文件就只能写入不能读取,如果我们想先读取再写入,可以用r+模式
4 关闭文件
文件操作完毕后,文件对象需要调用一个close()方法关闭文件释放资源。
每次文件操作完毕后都应该关闭文件,但是有可能会粗心忘记关闭,怎么办呢?我们可以在调用open()函数打开文件的时候使用with关键字,然后用as指定读取到的文件,这样在with代码块执行完后文件就会被自动关闭了,实例:
# 使用 with 语句来读取文件
with open('data.txt', 'r', encoding='utf-8') as file:
for line in file.readlines():
print(line.strip())
18 Python如何操作文件?的更多相关文章
- 在Python中操作文件之truncate()方法的使用教程
在Python中操作文件之truncate()方法的使用教程 这篇文章主要介绍了在Python中操作文件之truncate()方法的使用教程,是Python入门学习中的基础知识,需要的朋友可以参考下 ...
- 字符编码和Python代码操作文件
字符编码和Python代码操作文件 读写模式之a模式 # a模式 只追加模式 # 路径不存在:自动创建 with open(r'a.txt','a',encoding='utf8') as f: pa ...
- python 关于操作文件的相关模块(os,sys,shutil,subprocess,configparser)
一:os模块 os模块提供了许多允许你程序与操作系统直接交互的功能 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname&quo ...
- python关于操作文件的相关模块(os,sys,shutil,subprocess,configparser)
一:os模块 os模块提供了许多允许你程序与操作系统直接交互的功能 功能 说明 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirna ...
- python读写操作文件
with open(xxx,'r,coding='utf-8') as f: #打开文件赋值给F ,并且执行完了之后不需要 f.close(). 在Python 2.7 及以后,with又支持同时 ...
- Python open操作文件
操作文件 # coding=utf-8 支持中文 """ China Japan France England """ f = open(& ...
- Python:操作文件
python操作文件库不需要安装其他module,文件操作类库是python语言自身支持的操作. 判定文件是否存在:os.path.isfile(filePath) import os import ...
- python 基础 操作文件和目录
获得当前目录路径 :os.getcwd() 返回指定目录下的所有文件和目录名:os.listdir() 删除一个文件:os.remove(filename) 删除多个空目录 :os.removefir ...
- Python之操作文件和目录
Python内置的os模块可以直接调用操作系统提供的接口函数. # coding=utf-8 # 在指定目录以及指定目录的所有子目录下查找文件名包含指定字符串的文件,并打印出相对路径 import o ...
- python selenium 操作文件上传,并发操作时,文件选择窗口混乱解决方案
上传文件 使用的是 python + autoit 模块,这种方式有一个问题,当出现多条任务同时选择文件上传的时候,无法判断那个文件选择窗口的归属,从而出现上传了错误的文件! 解决方法: 要上载文件而 ...
随机推荐
- SpringCloud注册中心切换nacos
SpringBoot与nacos版本对应关系 https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF ...
- Java uuid生成随机32位
import java.util.UUID; /** * @ClassName:UuidUtils * @Description:uuid工具类 * @Author:chenyb * @Date:20 ...
- 解决方案 | 预装win11如何退回win10?
0.定义 本文所说的[退回]并不指的是win10升级后的变成win11再变为win10的退回.退回应该理解为[降级],或者叫作返回上一个版本.本文的适用范围局限于,预装系统是win11,想要不通过u盘 ...
- 如何在有数BI中实现千人千面的数据推送?
问题背景 前几天有个项目管理的同学来咨询我一个问题,该项目有一个项目进度信息表,表中有项目名称,项目阶段,项目状态,项目任务等字段,在实际工作中想要实现如下场景: 当项目名称为A时,且项目阶段是需求阶 ...
- [rCore学习笔记 07]移除标准库依赖
改造Rust hello world 移除println!宏 rustc添加对裸机的支持 rustup target add riscv64gc-unknown-none-elf detail rus ...
- 玄机-第二章日志分析-mysql应急响应
目录 前言 简介 应急开始 准备工作 日志分析 步骤 1 步骤 2 步骤 3 步骤 4 总结 补充mysql中的/var/log/mysql/erro.log 记录上传文件信息的原因 前言 这里应急需 ...
- ComfyUI插件:IPAdapter_plus(新版)节点
ComfyUI插件:IPAdapter_plus(新版)节点 前言: 学习ComfyUI是一场持久战,而IPAdapter_plus是常用且便捷有效的风格迁移模型,可以通过提供参考图像去进行图像的生成 ...
- Mysql函数1-IFNULL
IFNULL函数用于判断参数值是null时则返回指定内容. 原本 select goods_base_name,goods_id from goods where goods_id in (6,7,8 ...
- IDL根据Landsat QA波段去云处理【代码】
IDL根据Landsat QA波段去云处理[代码] landsat QA波段(质量评估波段)是Landsat卫星影像数据中的一个特殊波段,他在Landsat5-9的每个产品中都存在.虽然我们常用的 ...
- 【SQL】 牛客网SQL训练Part1 简单难度
地址位置: https://www.nowcoder.com/exam/oj?difficulty=2 查找入职员工时间排名倒数第三的员工所有信息 -- 准备脚本 drop table if exis ...