- Python 教程
- Python 教程
- Python - 概述
- Python - 历史
- Python - 特性
- Python 与 C++
- Python - Hello World 程序
- Python - 应用领域
- Python 解释器及其模式
- Python - 环境设置
- Python - 虚拟环境
- Python - 基本语法
- Python - 变量
- Python - 数据类型
- Python - 类型转换
- Python - Unicode 系统
- Python - 文字
- Python - 运算符
- Python - 算术运算符
- Python - 比较运算符
- Python - 赋值运算符
- Python - 逻辑运算符
- Python - 按位运算符
- Python - 成员资格运算符
- Python - 身份运算符
- Python - 运算符优先级
- Python - 注释
- Python - 用户输入
- Python - 数字
- Python - 布尔值
- Python 控制语句
- Python - 控制流
- Python - 决策
- Python - if 语句
- Python - if-else 语句
- Python - 嵌套 if 语句
- Python - Match-Case 语句
- Python - 循环
- Python - For 循环
- Python for-else 循环
- Python - While 循环
- Python - break 语句
- Python - Continue 语句
- Python - pass 语句
- Python - 嵌套循环
- Python 函数和模块
- Python - 函数
- Python - 默认参数
- Python - 关键字参数
- Python - 仅关键字参数
- Python - 位置参数
- Python - 仅位置参数
- Python - 任意或可变长度参数
- Python - 变量范围
- Python - 函数注释
- Python - 模块
- Python - 内置函数
- Python 字符串
- Python - 字符串
- Python - 切片字符串
- Python - 修改字符串
- Python - 字符串连接
- Python - 字符串格式化
- Python - 转义字符
- Python - 字符串方法
- Python - 字符串练习
- Python 列表
- Python - 列表
- Python - 访问列表项
- Python - 更改列表项
- Python - 添加列表项
- Python - 删除列表项
- Python - 循环列表
- Python - 列表推导式
- Python - 排序列表
- Python - 复制列表
- Python - 联接列表
- Python - 列表方法
- Python - 列表练习
- Python 元组
- Python - 元组(Tuple )
- Python - 访问元组项
- Python - 更新元组
- Python - 解压缩元组项
- Python - 循环元组
- Python - 联接元组
- Python - 元组方法
- Python - 元组练习
- Python 集
- Python - 集(sets)
- Python - 访问 Set Items
- Python - 添加 Set Items
- Python - 删除 Set Items
- Python - 循环 Set Items
- Python - 联接 Sets
- Python - 复制 Set
- Python - Set 运算符
- Python - Set 方法
- Python - Set 的练习
- Python 字典
- Python - 字典
- Python - 访问字典项
- Python - 更改字典项
- Python - 添加字典项
- Python - 删除字典项
- Python - 字典视图对象
- Python - 循环字典
- Python - 复制字典
- Python - 嵌套字典
- Python - 字典方法
- Python - 字典练习
- Python 数组
- Python - 数组
- Python - 访问数组项
- Python - 添加数组项
- Python - 删除数组项
- Python - 循环数组
- Python - 复制数组
- Python - 反向数组
- Python - 对数组进行排序
- Python - 连接数组
- Python - 数组方法
- Python - 数组练习
- Python 文件处理
- Python - 文件处理
- Python - 写入文件
- Python - 读取文件
- Python - 重命名和删除文件
- Python - 目录
- Python - 文件方法
- Python OS 文件/目录方法
- Python - os.path 方法
- 面向对象编程
- Python - OOP 概念
- Python - 类和对象
- Python - 类属性
- Python - 类方法
- Python - 静态方法
- Python - 构造函数
- Python - 访问修饰符
- Python - 继承
- Python - 多态性
- Python - 方法覆盖
- Python - 方法重载
- Python - 动态绑定
- Python - 动态类型
- Python - 抽象
- Python - 封装
- Python - 接口
- Python - 软件包
- Python - 内部类
- Python - 匿名类和对象
- Python - 单例类
- Python - 包装类
- Python - 枚举
- Python - 反射
- Python 错误和异常
- Python - 语法错误
- Python - 异常处理
- Python - try-except 块
- Python - try-finally 块
- Python - 引发异常
- Python - 异常链接
- Python - 嵌套 try 块
- Python - 用户定义的异常
- Python - 日志记录
- Python - 断言
- Python - 内置异常
- Python 多线程
- Python - 多线程
- Python - 线程生命周期
- Python - 创建线程
- Python - 启动线程
- Python - 联接线程
- Python - 命名线程
- Python - 线程调度
- Python - 线程池
- Python - 主线程
- Python - 线程优先级
- Python - 守护程序线程
- Python - 同步线程
- Python 同步
- Python - 线程间通信
- Python - 线程死锁
- Python - 中断线程
- Python 网络
- Python - 网络编程
- Python - 套接字编程
- Python - URL 处理
- Python - 泛型
- Python 杂项
- Python - 日期和时间
- Python - math 模块
- Python - 迭代器
- Python - 生成器
- Python - 闭包(closures)
- Python - 装饰器( Decorators)
- Python - 递归
- Python - 正则表达式
- Python - PIP
- Python - 数据库访问
- Python - 弱引用
- Python - 序列化
- Python - 模板
- Python - 输出格式
- Python - 性能测量
- Python - 数据压缩
- Python - CGI 编程
- Python - XML 处理
- Python - GUI 编程
- Python - 命令行参数
- Python - 文档字符串
- Python - JSON
- Python - 发送电子邮件
- Python - 更多扩展
- Python - 工具/实用程序
- Python - 图形用户界面
- Python 高级概念
- Python - 抽象基类
- Python - 自定义异常
- Python - 高阶函数
- Python - 对象内部
- Python - 内存管理
- Python - 元类
- Python - 使用 Metaclasses 进行元编程
- Python - 模拟和存根
- Python - 猴子修补
- Python - 信号处理
- Python - 类型提示
- Python - 自动化教程
- Python - 人性化软件包
- Python - 上下文管理器
- Python - 协程
- Python - 描述符
- Python - 诊断和修复内存泄漏
- Python - 不可变数据结构
Python - 读取文件
从文件中读取包括打开文件、读取其内容,然后关闭文件以释放系统资源。Python 提供了多种从文件中读取数据的方法,每种方法都适用于不同的用例。
打开文件进行读取
打开文件是读取其内容的第一步。在 Python 中,您可以使用 open() 函数打开文件。此函数至少需要一个参数、filename 和指定打开文件目的的模式(可选)。
要打开文件进行读取,请使用 'r' 模式。这是默认模式,因此如果只需要从文件中读取,则可以省略它。
使用 read() 方法读取文件
read() 方法用于读取 Python 中的文件内容。它将文件的全部内容作为单个字符串读取。当您需要一次处理整个文件时,此方法特别有用。
语法
以下是 Python 中 read() 方法的基本语法 -
file_object.read(size)
哪里
- file_object 是 open() 函数返回的文件对象。
- size 是从文件中读取的字节数。此参数是可选的。如果省略或设置为负值,则该方法将读取直到文件末尾。
在以下示例中,我们在读取模式下打开文件 “example.txt”。然后我们使用 read() 方法读取文件的全部内容 -
# Open the file in read mode
file = open('example.txt', 'r')
# Read the entire content of the file
content = file.read()
# Print the content
print(content)
# Close the file
file.close()
执行上述代码后,我们得到以下输出 -
使用 readline() 方法读取文件
readline() 方法用于一次从文件中读取一行。当您需要逐行处理文件时,此方法非常有用,尤其是对于一次读取整个内容不切实际的大文件。
语法
以下是 Python 中 readline() 方法的基本语法 -
file_object.readline(size)
哪里
- file_object 是 open() 函数返回的文件对象。
- size 是一个可选参数,用于指定要从该行读取的最大字节数。如果省略或设置为负值,则该方法将读取直到行尾。
例
在下面的示例中,我们在读取模式下打开文件 “example.txt”。然后我们使用 readline() 方法读取文件的第一行 -
# Open the file in read mode
file = open('example.txt', 'r')
# Read the first line of the file
line = file.readline()
# Print the line
print(line)
# Close the file
file.close()
以下是上述代码的输出 -
使用 readlines() 方法读取文件
readlines() 方法从文件中读取所有行,并将它们作为字符串列表返回。列表中的每个字符串都表示文件中的一行,包括每行末尾的换行符。
当您需要一次处理或分析文件的所有行时,此方法特别有用。
语法
以下是 Python 中 readlines() 方法的基本语法 -
file_object.readlines(hint)
哪里
- file_object 是 open() 函数返回的文件对象。
- hint 是一个可选参数,用于指定要读取的字节数。如果指定,则读取最多为指定字节的行,而不必读取整个文件。
例
在此示例中,我们在读取模式下打开文件 “example.txt”。然后我们使用 readlines() 方法从文件中读取所有行,并将它们作为字符串列表返回 -
# Open the file in read mode
file = open('example.txt', 'r')
# Read all lines from the file
lines = file.readlines()
# Print the lines
for line in lines:
print(line, end='')
# Close the file
file.close()
上述代码的输出如下所示 -
Hi Surya.
How are you?.
使用 “with” 语句
Python 中的 “with” 语句用于异常处理。在处理文件时,使用 “with” 语句可确保文件在读取后正确关闭,即使发生异常也是如此。
例
下面是一个使用 with 语句打开、读取和打印文件内容的简单示例 -
# Using the with statement to open a file
with open('example.txt', 'r') as file:
content = file.read()
print(content)
我们得到的输出如下 -
Hi Surya.
How are you?.
以二进制模式读取文件
默认情况下,对文件对象的读/写操作是对文本字符串数据执行的。如果我们想处理不同类型的文件,例如媒体文件 (mp3)、可执行文件 (exe) 或图片 (jpg),我们必须通过在读/写模式中添加“b”前缀来以二进制模式打开文件。
写入二进制文件
假设 test.bin 文件已经以二进制模式写入 -
# Open the file in binary write mode
with open('test.bin', 'wb') as f:
data = b"Hello World"
f.write(data)
例
要读取二进制文件,我们需要以 'rb' 模式打开它。然后在打印之前对 read() 方法的返回值进行解码 -
# Open the file in binary read mode
with open('test.bin', 'rb') as f:
data = f.read()
print(data.decode(encoding='utf-8'))
它将产生以下输出 -
从文件中读取整数数据
要将整数数据写入二进制文件,应使用 to_bytes() 方法将整数对象转换为字节。
将整数写入二进制文件
以下是有关如何将整数写入二进制文件的示例 -
# Convert the integer to bytes and write to a binary file
n = 25
data = n.to_bytes(8, 'big')
with open('test.bin', 'wb') as f:
f.write(data)
从二进制文件中读取整数
要从二进制文件中读回整数数据,请使用 from_bytes() 方法将 read() 函数的输出转换回整数 −
# Read the binary data from the file and convert it back to an integer
with open('test.bin', 'rb') as f:
data = f.read()
n = int.from_bytes(data, 'big')
print(n)
从文件中读取浮点数据
为了处理二进制文件中的浮点数据,我们需要使用 Python 标准库中的 struct 模块。此模块有助于在 Python 值和表示为 Python 字节对象的 C 结构之间进行转换。
将浮点数写入二进制文件
要将浮点数据写入二进制文件,我们使用 struct.pack() 方法将浮点数转换为 bytes 对象 -
import struct
# Define a floating-point number
x = 23.50
# Pack the float into a binary format
data = struct.pack('f', x)
# Open the file in binary write mode and write the packed data
with open('test.bin', 'wb') as f:
f.write(data)
从二进制文件中读取浮点数
要从二进制文件中读取浮点数据,我们使用 struct.unpack() 方法将 bytes 对象转换回浮点数 -
import struct
# Open the file in binary read mode
with open('test.bin', 'rb') as f:
# Read the binary data from the file
data = f.read()
# Unpack the binary data to retrieve the float
x = struct.unpack('f', data)[0]
# Print the float value
print(x)
使用 “r+” 模式读取和写入文件
当打开文件进行读取时(使用 'r' 或 'rb'),除非关闭文件并以其他模式重新打开,否则无法写入数据。为了同时执行读取和写入操作,我们将 '+' 字符添加到 mode 参数中。使用 'w+' 或 'r+' 模式可以在不关闭文件的情况下同时使用 write() 和 read() 方法。
File 对象还支持 seek() 函数,该函数允许将读/写指针重新定位到文件中任何所需的字节位置。
语法
以下是 seek() 方法的语法 -
fileObject.seek(offset[, whence])
参数
- offset - 这是读/写指针在文件中的位置。
- whence − 这是可选的,默认为 0 表示绝对文件定位,其他值为 1 表示相对于当前位置的 seek,2 表示相对于文件末尾的 seerk。
以下程序以 'r+' 模式(读写模式)打开一个文件,在文件中查找某个位置,并从该位置读取数据 -
# Open the file in read-write mode
with open("foo.txt", "r+") as fo:
# Move the read/write pointer to the 10th byte position
fo.seek(10, 0)
# Read 3 bytes from the current position
data = fo.read(3)
# Print the read data
print(data)
执行上述代码后,我们得到以下输出 -
在 Python 中同时读取和写入文件
当打开文件进行写入时(使用 'w' 或 'a'),无法从中读取,尝试这样做将引发 UnsupportedOperation 错误。
同样,当打开文件进行读取(使用 'r' 或 'rb')时,不允许写入该文件。要在读取和写入之间切换,通常需要关闭文件,然后以所需的模式重新打开它。
要同时执行读取和写入操作,可以将 '+' 字符添加到 mode 参数中。使用 'w+' 或 'r+' 模式可以同时启用 write() 和 read() 方法,而无需关闭文件。
此外,File 对象还支持 seek() 函数,该函数允许您将读/写指针重新定位到文件中任何所需的字节位置。
例在此示例中,我们以 'r+' 模式打开文件并将数据写入该文件。seek(0) 方法将指针重新定位到文件开头 -
# Open the file in read-write mode
with open("foo.txt", "r+") as fo:
# Write data to the file
fo.write("This is a rat race")
# Rewind the pointer to the beginning of the file
fo.seek(0)
# Read data from the file
data = fo.read()
print(data)
从 Specific Offset 读取文件
我们可以使用 seek() 方法将文件的当前位置设置在指定的偏移量处。
- 如果使用 'a' 或 'a+' 打开文件进行追加,则任何 seek() 操作都将在下次写入时撤消。
- 如果文件仅用于使用 'a' 在 append 模式下写入,则此方法本质上是无操作,但它对于在启用读取(模式 'a+')的情况下以 append 模式打开的文件仍然很有用。
- 如果使用 't' 以文本模式打开文件,则只有 tell() 返回的偏移量是合法的。使用其他偏移量会导致未定义的行为。
请注意,并非所有文件对象都是可查找的。
例以下示例演示如何使用 seek() 方法对文件执行同步读/写操作。文件以 w+ 模式(读写模式)打开,添加一些数据,然后在特定位置读取和修改文件 -
# Open a file in read-write mode
fo = open("foo.txt", "w+")
# Write initial data to the file
fo.write("This is a rat race")
# Seek to a specific position in the file
fo.seek(10, 0)
# Read a few bytes from the current position
data = fo.read(3)
print("Data read from position 10:", data)
# Seek back to the same position
fo.seek(10, 0)
# Overwrite the earlier contents with new text
fo.write("cat")
# Rewind to the beginning of the file
fo.seek(0, 0)
# Read the entire file content
data = fo.read()
print("Updated file content:", data)
# Close the file
fo.close()
以下是上述代码的输出 -
Updated file content: This is a cat race