博客
关于我
【Python】(十二)IO 文件处理
阅读量:355 次
发布时间:2019-03-05

本文共 3038 字,大约阅读时间需要 10 分钟。

文件处理

文件处理是编程中的常见操作之一。在Python中,文件处理主要涉及读取和写入文件内容。以下是文件处理的详细步骤和技巧。

1. 读取文件

要读取文件内容,首先需要打开文件。在Python中,可以使用内置的 open() 函数来打开文件。文件的读取模式包括:

  • 文本文件('r'):默认模式,用于读取文本文件。
  • 二进制文件('rb'):用于读取二进制文件,如图片、视频等。
  • 追加模式('a'):用于在文本文件末尾追加内容。
  • 写入模式('w'):用于写入新文件或替换已有文件内容。

示例:读取文本文件

with open('/path/to/file.txt', 'r') as f:    content = f.read()

示例:读取二进制文件

with open('/path/to/image.jpg', 'rb') as f:    image_data = f.read()

示例:读取特定编码的文本文件

with open('/path/to/gbk_file.txt', 'r', encoding='gbk') as f:    content = f.read()

示例:处理编码错误

with open('/path/to/encoded_file.txt', 'r', encoding='utf-8', errors='ignore') as f:    content = f.read()

2. 写入文件

写入文件时,使用 write() 方法将内容添加到文件中。写入操作与读取操作类似,但需要指定写入模式。

示例:写入文本文件

with open('/path/to/output.txt', 'w') as f:    f.write('Hello, World!')

示例:追加内容

with open('/path/to/output.txt', 'a') as f:    f.write('This is an appended line.')

示例:写入二进制文件

with open('/path/to/output.bin', 'wb') as f:    f.write(b'Binary Data')

3. 文件处理方法

文件对象提供了多种方法来进行文件操作,包括但不限于:

  • close():关闭文件,释放资源。
  • read():读取文件内容。
  • readline():读取一行内容。
  • readlines():读取所有内容并按行返回。
  • seek():移动文件指针。
  • tell():获取文件当前位置。
  • truncate():截断文件。

示例:移动文件指针

with open('/path/to/file.txt', 'r') as f:    f.seek(100)  # 移动到第100个字节    content = f.read()

4. 文件存储模块

在编程中,有时需要将数据持久化存储,以便在程序重新启动时继续使用。Python 提供了 pickle 模块来实现对象的序列化和反序列化。

示例:序列化和反序列化

import pickle# 定义一个字典data = {'name': 'Bob', 'age': 20, 'score': 88}# 序列化并写入文件with open('data.bin', 'wb') as f:    pickle.dump(data, f)# 反序列化读取文件with open('data.bin', 'rb') as f:    data = pickle.load(f)    print(data)

示例:处理自定义类

如果需要序列化自定义类实例,可以使用 default 参数。

import pickleclass Student:    def __init__(self, name, age, score):        self.name = name        self.age = age        self.score = score# 创建学生实例student = Student('Bob', 20, 88)# 序列化并写入文件with open('student_data.bin', 'wb') as f:    pickle.dump(student, f)# 反序列化读取文件with open('student_data.bin', 'rb') as f:    student = pickle.load(f)    print(student.name, student.age, student.score)

5. JSON 格式

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛应用于前后端通信。Python 提供了 json 模块来进行 JSON 格式的转换。

示例:将 Python 对象转换为 JSON

import jsondata = {    'name': 'Bob',    'age': 20,    'score': 88}# 序列化为 JSON 字符串json_data = json.dumps(data)print(json_data)

示例:反序列化 JSON 为 Python 对象

import json# 读取 JSON 字符串json_str = '{"name": "Bob", "age": 20, "score": 88}'# 反序列化为 Python 对象data = json.loads(json_str)print(data)

示例:处理自定义类

如果需要将自定义类序列化为 JSON,可以使用 object_hook 参数。

import jsonclass Student:    def __init__(self, name, age, score):        self.name = name        self.age = age        self.score = score# 创建学生实例student = Student('Bob', 20, 88)# 序列化为 JSONjson_data = json.dumps(student, object_hook=lambda obj: {'name': obj.name, 'age': obj.age, 'score': obj.score})print(json_data)# 反序列化为 Student 实例student_data = json.loads(json_data, object_hook=lambda obj: Student(obj['name'], obj['age'], obj['score']))print(student_data.name, student_data.age, student_data.score)

总结

文件处理是编程中的基础操作,熟练掌握读写文件的技巧,对于数据的持久化存储和传输至关重要。通过使用 open()read()write() 等方法,可以高效地处理文件操作。对于复杂数据的存储和传输,可以利用 picklejson 模块来实现数据的序列化和反序列化。

转载地址:http://xbig.baihongyu.com/

你可能感兴趣的文章
279 完全平方数(bfs)
查看>>
410 分割数组的最大值(二分查找、动态规划)
查看>>
875 爱吃香蕉的珂珂(二分查找)
查看>>
桌面图标的自动排列图标
查看>>
第十一届蓝桥杯python组第二场省赛-数字三角形
查看>>
数字三角形的无返回值的深度优先搜索解法
查看>>
完全背包问题的简化思路
查看>>
Jquery添加元素
查看>>
Jquery使用需要下载的文件
查看>>
BST中某一层的所有节点(宽度优先搜索)
查看>>
广度优先搜索
查看>>
猜字母
查看>>
Eclipse导出项目出现resource is out of sync with the file...错误
查看>>
Linux网络环境配置(设置ip地址)
查看>>
Idea使用Spring Initializr来快速创建springboot项目
查看>>
Dijkstra算法的总结
查看>>
ubuntu中安装scikit-learn
查看>>
SpringCloud和SprinBoot之间的关系
查看>>
javascript定义变量及数据类型介绍
查看>>
C语言的运算符和表达式
查看>>