Python 基础(十二):文件基本操作
1 简介
在编程工作中文件操作还是比较常见的,基本文件操作包括:创建、读、写、关闭等,Python 中内置了一些文件操作函数,我们使用 Python 操作文件还是很方便的。
2 基本操作
2.1 创建
Python 使用 open()
函数创建或打开文件,语法格式如下所示:
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
参数说明如下所示:
- file:表示将要打开的文件的路径,也可以是要被封装的整数类型文件描述符。
-
mode:是一个可选字符串,用于指定打开文件的模式,默认值是
'r'
(以文本模式打开并读取)。可选模式如下:
模式 |
描述 |
---|---|
r |
读取(默认) |
w |
写入,并先截断文件 |
x |
排它性创建,如果文件已存在则失败 |
a |
写入,如果文件存在则在末尾追加 |
b |
二进制模式 |
t |
文本模式(默认) |
+ |
更新磁盘文件(读取并写入) |
- buffering:是一个可选的整数,用于设置缓冲策略。
- encoding:用于解码或编码文件的编码的名称。
- errors:是一个可选的字符串,用于指定如何处理编码和解码错误(不能在二进制模式下使用)。
- newline:区分换行符。
- closefd:如果 closefd 为 False 并且给出了文件描述符而不是文件名,那么当文件关闭时,底层文件描述符将保持打开状态;如果给出文件名,closefd 为 True (默认值),否则将引发错误。
- opener:可以通过传递可调用的 opener 来使用自定义开启器。
以 txt 格式文件为例,我们不手动创建文件,通过代码方式来创建,如下所示:
open('test.txt', mode='w',encoding='utf-8')
执行完上述代码,就为我们创建好了 test.txt 文件。
2.2 写入
上面我们创建的文件 test.txt 没有任何内容,我们向这个文件中写入一些信息,对于写操作,Python 文件对象提供了两个函数,如下所示:
函数 |
描述 |
---|---|
write(str) |
将字符串写入文件,返回写入字符长度 |
writelines(s) |
向文件写入一个字符串列表 |
我们使用这两个函数向文件中写入一些信息,如下所示:
wf = open('test.txt', 'w', encoding='utf-8')
wf.write('Tomn')
wf.writelines(['Hellon', 'Python'])
# 关闭
wf.close()
上面我们使用了 close() 函数进行关闭操作,如果打开的文件忘记了关闭,可能会对程序造成一些隐患,为了避免这个问题的出现,可以使用 with as
语句,通过这种方式,程序执行完成后会自动关闭已经打开的文件。如下所示:
with open('test.txt', 'w', encoding='utf-8') as wf:
wf.write('Tomn')
wf.writelines(['Hellon', 'Python'])
2.3 读取
之前我们已经向文件中写入了一些内容,现在我们读取一下,对于文件的读操作,Python 文件对象提供了三个函数,如下所示:
函数 |
描述 |
---|---|
read(size) |
读取指定的字节数,参数可选,无参或参数为负时读取所有 |
readline() |
读取一行 |
readlines() |
读取所有行并返回列表 |
我们使用上面三个函数读取一下之前写入的内容,如下所示:
with open('test.txt', 'r', encoding='utf-8') as rf:
print('readline-->', rf.readline())
print('read-->', rf.read(6))
print('readlines-->', rf.readlines())
2.4 定位
Python 提供了两个与文件对象位置相关的函数,如下所示:
函数 |
描述 |
---|---|
tell() |
返回文件对象在文件中的当前位置 |
file.seek(offset[, whence]) |
将文件对象移动到指定的位置;offset 表示移动的偏移量;whence 为可选参数,值为 0 表示从文件开头起算(默认值)、值为 1 表示使用当前文件位置、值为 2 表示使用文件末尾作为参考点 |
下面通过示例对上述函数作进一步了解,如下所示:
with open('test.txt', 'rb+') as f:
f.write(b'123456789')
# 文件对象位置
print(f.tell())
# 移动到文件的第四个字节
f.seek(3)
# 读取一个字节,文件对象向后移动一位
print(f.read(1))
print(f.tell())
# 移动到倒数第二个字节
f.seek(-2, 2)
print(f.tell())
print(f.read(1))
2.5 其他
除了上面那些函数,Python 文件对象还有一些其他方法,如:isatty() 和 truncate(),但它们的出场率较低,没什么存在感。
直接通过示例简单了解一下,如下所示:
with open('test.txt', 'r+') as f:
# 检测文件对象是否连接到终端设备
print(f.isatty())
# 截取两个字节
f.truncate(2)
print(f.read())
参考:https://docs.python.org/zh-cn/3.7/library/index.html
- ZooKeeper 笔记(5) ACL(Access Control List)访问控制列表
- 算法:支持重复元素的二分查找
- .NET 异常处理的动作策略(Action Policy)
- 如何在mac本上安装android sdk
- Fityk-曲线拟合工具
- maven: 打包可运行的jar包(java application)及依赖项处理
- Effective java 第2版 - 笔记(01) 单例(Singleton)的枚举(enum)实现
- 恶心的0.5四舍五入问题
- 乐视金融更名 相关域名引关注
- weblogic.nodemanager.common.ConfigException: Native version is enabled but nodemanager native librar
- hadoop 2.6伪分布安装
- ssh 免密码设置失败原因总结
- C++服务器开发之基于对象的编程风格
- The jQuery UI CSS Framework
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 搭建prometheus+grafana监控SpringBoot应用入门
- 掘金15W沸点简单分析(二)
- 老生常谈SpringAop日志收集与处理做的工具包
- 线程间通信wait---notify
- Ubuntu安装Oracle Java8
- CentOS7安装Git
- RocketMQ-环境搭建(单master模式-ubuntu版)
- 使用Web.xml配置SpringMvc(同时使用xml配置文件)
- 第七节:Activiti6.0——Task的变量使用
- 第八节:Activiti6.0——启动流程相关
- 第九节:Activiti6.0——ReceiveTask接收信号、中间信号捕获事件和中间消息捕获事件的流程推进
- SpringBoot——全局异常捕获和自定义异常
- RTSP协议视频平台EasyNVR接入到EasyNVS管理平台后无法显示RTMP及RTSP视频流地址问题
- SpringBoot——配置logback日志
- Istio 运维实战系列(2):让人头大的『无头服务』-上