【Python 基础学习笔记】文件的基础操作

news/2024/11/17 19:52:06/

目录

  • 1. 创建
  • 2. 写入
  • 3. 关闭
  • 4. 读取
  • 5. 定位
  • 6. 其他方法

1. 创建

Python 使用 open() 函数创建或打开文件,语法格式如下所示:

python">open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

参数说明如下所示:

  • file:表示将要打开的文件的路径,也可以是要被封装的整数类型文件描述符。(如果是文件描述符,它会随着返回的 I/O 对象关闭而关闭,除非 closefd 被设为 False 。)
  • mode:是一个可选字符串,用于指定打开文件的模式,默认值是 ‘r’(以文本模式打开并读取,同 ‘rt’)。对于二进制写入, ‘w+b’
    模式打开并把文件截断成 0 字节; ‘r+b’ 则不会截断。可选模式如下:
python">模式	描述
r		读取(默认)
w		写入,并先截断文件
x		排它性创建,如果文件已存在则失败
a		写入,如果文件存在则在末尾追加
b		二进制模式
t		文本模式(默认)+ 	更新磁盘文件(读取并写入)
  • buffering:是一个可选的整数,用于设置缓冲策略。传递0以切换缓冲关闭(仅允许在二进制模式下),1选择行缓冲(仅在文本模式下可用),并且>1的整数以指示固定大小的块缓冲区的大小(以字节为单位)。如果没有给出 buffering 参数,则默认缓冲策略的工作方式如下:
python">二进制文件以固定大小的块进行缓冲;使用启发式方法选择缓冲区的大小,尝试确定底层设备的“块大小”或使用 io.DEFAULT_BUFFER_SIZE。在许多系统上,缓冲区的长度通常为40968192字节。“交互式”文本文件( isatty() 返回 True 的文件)使用行缓冲。其他文本文件使用上述策略用于二进制文件。
  • encoding:用于解码或编码文件的编码的名称。
  • errors:是一个可选的字符串,用于指定如何处理编码和解码错误(这应该只在文本模式下使用。不能在二进制模式下使用)。
  • newline:区分换行符,它可以是 None,‘’,‘\n’,‘\r’ 和 ‘\r\n’。它的工作原理:
python">从流中读取输入时,如果 newline 为 None,则启用通用换行模式。输入中的行可以以 '\n''\r''\r\n' 结尾,这些行被翻译成 '\n' 在返回呼叫者之前。如果它是 '',则启用通用换行模式,但行结尾将返回给调用者未翻译。如果它具有任何其他合法值,则输入行仅由给定字符串终止,并且行结尾将返回给未调用的调用者。将输出写入流时,如果 newline 为 None,则写入的任何 '\n' 字符都将转换为系统默认行分隔符 os.linesep。如果 newline 是 '''\n',则不进行翻译。如果 newline 是任何其他合法值,则写入的任何 '\n' 字符将被转换为给定的字符串。
  • closefd:如果 closefd 为 False
    并且给出了文件描述符而不是文件名,那么当文件关闭时,底层文件描述符将保持打开状态;如果给出文件名,closefd 为 True(默认值),否则将引发错误。标准名称包括:
python">如果存在编码错误,'strict' 会引发 ValueError 异常。 默认值 None 具有相同的效果。'ignore' 忽略错误。请注意,忽略编码错误可能会导致数据丢失。'replace' 会将替换标记(例如 '?' )插入有错误数据的地方。'surrogateescape' 将表示任何不正确的字节作为Unicode专用区中的代码点,范围从U+DC80到U+DCFF。当在写入数据时使用 surrogateescape 错误处理程序时,这些私有代码点将被转回到相同的字节中。这对于处理未知编码的文件很有用。只有在写入文件时才支持 'xmlcharrefreplace'。编码不支持的字符将替换为相应的XML字符引用 &#nnn;。'backslashreplace' 用Python的反向转义序列替换格式错误的数据。'namereplace' (也只在编写时支持)用 \N{...} 转义序列替换不支持的字符。
  • opener:可以通过传递可调用的 opener 来使用自定义开启器。 以 txt 格式文件为例,我们不手动创建文件,通过代码方式来创建,如下所示:
python">open('test.txt', mode='w',encoding='utf-8')

执行完上述代码,就为我们创建好了 test.txt 文件。

2. 写入

上面我们创建的文件 test.txt 没有任何内容,我们向这个文件中写入一些信息,对于写操作,Python 文件对象提供了两个函数,如下所示:

python">函数				描述
write(str)			将字符串写入文件,返回写入字符长度
writelines(s)		向文件写入一个字符串列表

我们使用这两个函数向文件中写入一些信息,如下所示:

python">wf = open('test.txt', 'w', encoding='utf-8')
wf.write('Tom\n')
wf.writelines(['Hello\n', 'Python'])
# 关闭
wf.close()

3. 关闭

上面我们使用了 close() 函数进行关闭操作,如果打开的文件忘记了关闭,可能会对程序造成一些隐患,为了避免这个问题的出现,可以使用 with as 语句,通过这种方式,程序执行完成后会自动关闭已经打开的文件。
with 语句是一种上下文管理器,当它的代码块执行完毕时,会自动关闭文件。这是推荐的方式,因为它确保文件在使用完毕后被正确关闭,即使发生异常也能保证关闭。如下所示:

python">with open('test.txt', 'w', encoding='utf-8') as wf:wf.write('Tom\n')wf.writelines(['Hello\n', 'Python'])

4. 读取

之前我们已经向文件中写入了一些内容,现在我们读取一下,对于文件的读操作,Python 文件对象提供了三个函数,如下所示:

python">函数			描述
read(size)		读取指定的字节数,参数可选,无参或参数为负时读取所有
readline()		读取一行
readlines()		读取所有行并返回列表

我们使用上面三个函数读取一下之前写入的内容,如下所示:

python">with open('test.txt', 'r', encoding='utf-8') as rf:print('readline-->', rf.readline())print('read-->', rf.read(6))print('readlines-->', rf.readlines())

5. 定位

Python 提供了两个与文件对象位置相关的函数,如下所示:

python">函数							描述
tell()							返回文件对象在文件中的当前位置
file.seek(offset[, whence])		将文件对象移动到指定的位置;offset 表示移动的偏移量;whence 为可选参数,值为 0 表示从文件开头起算(默认值)、值为 1 表示使用当前文件位置、值为 2 表示使用文件末尾作为参考点

下面通过示例对上述函数作进一步了解,如下所示:

python">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))

6. 其他方法

python">with open('test.txt', 'r+') as f:# 检测文件对象是否连接到终端设备print(f.isatty())# 截取两个字节f.truncate(2)print(f.read())

http://www.ppmy.cn/news/1531053.html

相关文章

Kotlin:1.8.0 的新特性

一、概述 Kotlin 1.8.0版本英语官方文档 Kotlin 1.8.0 中文官方文档 The Kotlin 1.8.0 release is out and here are some of its biggest highlights: Kotlin 1.8.0发布了,下面是它的一些亮点: JVM 平台新增实验性函数:递归复制或删除目录内容改进了 …

微信小程序加载H5页面及与H5页面通信的实战教程

在微信小程序的开发过程中,我们有时需要在小程序中嵌入H5页面。本文将详细介绍如何在微信小程序中通过webview加载H5页面,并实现小程序与H5页面的通信。 一、准备工作 搭建微信小程序开发环境,具体步骤请参考官方文档:https://d…

代理IP对于网络爬虫业务的重要性

在现代互联网业务中,网络爬虫已成为企业获取大量数据的重要工具。在这一过程中,代理IP发挥着至关重要的作用,特别是对于高频率的数据抓取任务,代理IP能够有效提升爬虫的成功率和安全性。 1. 绕过IP封禁 网站为了防止过度的爬虫行…

C嘎嘎入门篇:类和对象(1)

前言: 小编在之前讲述了C的部分入门基础,读者朋友一定要掌握好那些,因为C的学习和C有点不同,C的知识都是比较连贯的,所以我们学好了前面才可以学习后面的内容,本篇文章小编将会讲述C真正的入门篇&#xff1…

数据结构升华部分:排序与字符串匹配算法应用

数据结构入门学习(全是干货)——综合应用 习题选讲 - 排序与字符串匹配算法 习题选讲 - Insert or Merge 习题-IOM.1 插入排序的判断 题意理解 如何区分简单插入和非递归的归并排序 插入排序:前面有序,后面没有变化。归并排…

Kotlin 操作符 in 的基本使用(十)

导读大纲 1.0.1 迭代集合1.0.2 使用 in 检查集合和范围 1.0.1 迭代集合 使用 for (x in y) 循环最常见的情况是对一个集合进行迭代 您很可能已经熟悉它的行为–对输入集合中的每个元素都执行循环 在这种情况下,您只需打印颜色集合中的每个元素 在循环内部,单个颜色可以用 colo…

软件架构的演变与趋势(软件架构演变的阶段、综合案例分析:在线电商平台架构演变、开发补充)

随着软件开发技术的不断进步,软件架构从最初的简单结构演变为如今的复杂系统,架构设计不再是简单的代码组合,而是战略性的系统设计,确保系统具备可扩展性、可靠性、安全性和可维护性。 文章目录 1. 软件架构演变的阶段1.1 单体架…

PHP常用正则表达式大全

平时做网站经常要用正则表达式,一些讲解和例子,仅供大家参考和修改使用: 一、匹配数字 "^\d$"  //非负整数(正整数 0)"^[0-9]*[1-9][0-9]*$"  //正整数"^((-\d)|(0))$"  //非正整数(负整数 0)"^-…