文件系统

文件系统

Yiuhang Chan

文件系统

持久化存储

在Python中,持久化存储是指将数据保存到一个持久的存储介质(如硬盘)中,以便即使在程序结束后也能再次访问这些数据。Python提供了多种方式来实现数据的持久化存储,包括但不限于文件存储、使用数据库以及利用特定的数据序列化格式。以下是一些常见的Python数据持久化方法:

1. 使用文件系统

最基本的持久化存储方法是直接读写文件。Python提供了多种方式来处理文件,包括文本文件和二进制文件。

1
2
3
4
5
6
7
# 写入文本文件
with open('example.txt', 'w') as file:
file.write('Hello, world!')

# 读取文本文件
with open('example.txt', 'r') as file:
content = file.read()

警告

出现的 UnicodeEncodeError 错误通常与编码有关。当尝试将包含非ASCII字符的字符串写入文件时,在某些情况下,Python的默认编码(如cp1252)可能无法正确处理这些字符。要解决这个问题,可以在写入文件时明确指定一个能够处理这些字符的编码,如UTF-8。

可以通过在 open 函数中添加 encoding='utf-8' 参数来修改代码。这将确保使用UTF-8编码来写入文件,UTF-8编码可以处理大多数字符集。

2. 数据序列化

Python提供了几种数据序列化(转换数据结构为可存储或传输的格式)的方法,例如JSON、Pickle等。

JSON:用于将数据结构转换为JSON格式。

1
2
3
4
5
6
7
8
9
10
import json

data = {'name': 'John', 'age': 30, 'city': 'New York'}
# 序列化到文件
with open('data.json', 'w') as json_file:
json.dump(data, json_file)

# 从文件反序列化
with open('data.json', 'r') as json_file:
data = json.load(json_file)

Pickle:用于Python对象的序列化,可以序列化几乎所有的Python对象类型。

1
2
3
4
5
6
7
8
9
import pickle

# 序列化到文件
with open('data.pkl', 'wb') as pkl_file:
pickle.dump(data, pkl_file)

# 从文件反序列化
with open('data.pkl', 'rb') as pkl_file:
data = pickle.load(pkl_file)

3. 使用数据库

对于复杂的数据持久化需求,常常会使用数据库。Python提供了许多连接和操作数据库的库,支持包括SQLite、MySQL、PostgreSQL等多种数据库。

  • SQLite(使用标准库sqlite3):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import sqlite3

# 连接到SQLite数据库
# 数据库文件是'data.db'
conn = sqlite3.connect('data.db')

# 创建一个Cursor对象
cursor = conn.cursor()

# 执行一个查询
cursor.execute('SELECT * FROM table_name')

# 关闭Cursor和Connection
cursor.close()
conn.close()

4. ORM(对象关系映射)

ORM框架如SQLAlchemy或Django ORM允许开发者以面向对象的方式来操作数据库,而无需直接编写SQL语句。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

Base = declarative_base()

class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String)

engine = create_engine('sqlite:///data.db')
Base.metadata.create_all(engine)

Session = sessionmaker(bind=engine)
session = Session()

new_user = User(name='John Doe')
session.add(new_user)
session.commit()
session.close()

总结

Python的数据持久化选项非常多样,可以根据具体的应用场景和需求选择最合适的方法。对于简单的数据存储,文件读写或使用JSON、Pickle等序列化方式可能就足够了。对于更复杂的数据和需求,使用数据库和ORM框架可能是更好的选择

文件操作

open 函数及其模式

  • 'r'模式:以只读方式打开文件。
1
2
with open('file.txt', 'r') as file:
content = file.read()
  • 'w'模式:以写入方式打开文件,如果文件存在则覆盖,不存在则创建。
1
2
with open('file.txt', 'w') as file:
file.write('Hello, World!')
  • 'a'模式:以写入方式打开文件,如果文件存在,则在文件末尾追加内容。
1
2
with open('file.txt', 'a') as file:
file.write('Append content')
  • 'r+'模式:以读写方式打开文件。
  • 'w+'模式:以读写方式打开文件,如果文件存在则覆盖,不存在则创建。
  • 'a+'模式:以读写方式打开文件,如果文件存在,则在文件末尾追加内容。

二进制模式(在模式字符串中加入'b'),例如'rb', 'wb', 'ab', 'rb+', 'wb+', 'ab+',用于非文本文件。

信息

r - 这个模式代表“只读”模式。当你打开一个文件进行读取时,如果没有指定特定的模式,Python会默认使用这个模式。在这种模式下,只能从文件中读取数据,而不能写入或修改数据。如果文件不存在,尝试以这种模式打开文件会导致错误。

文件操作

  • file.read():读取整个文件。
  • file.write():写入字符串到文件。
  • file.tell():返回文件的当前位置。
  • file.seek(offset):改变文件的当前位置。
  • file.close():关闭文件。通常与with语句一起使用,可以省略。

with 上下文管理器

使用with上下文管理器可以保证即使在发生异常时文件资源也能被正确释放。

1
2
with open('file.txt', 'r') as file:
content = file.read()

os 模块函数

  • os.getcwd():返回当前工作目录。
1
2
3
import os
cwd = os.getcwd()
print(cwd)
  • os.listdir():返回指定目录下的文件和子目录列表。
1
2
entries = os.listdir(cwd)
print(entries)
  • os.mkdir():创建新目录。
1
os.mkdir('new_directory')
  • os.rmdir():删除目录。
1
os.rmdir('new_directory')
  • os.remove():删除文件。
1
os.remove('file.txt')
  • os.rename():重命名文件或目录。
1
os.rename('old_name.txt', 'new_name.txt')
  • 标题: 文件系统
  • 作者: Yiuhang Chan
  • 创建于 : 2018-09-28 18:08:12
  • 更新于 : 2024-02-28 18:49:13
  • 链接: https://www.yiuhangblog.com/2018/09/28/20180928文件系统/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论