一、文本文件存储
1. os 文件 mode
python open() 函数用于打开一个文件,创建一个 file 对象,相关的方法才可以调用它进行读写。
open(name[, mode[, buffering]])
模式 | 描述 |
---|---|
t | 文本模式 (默认)。 |
x | 写模式,新建一个文件,如果该文件已存在则会报错。 |
b | 二进制模式。 |
+ | 打开一个文件进行更新(可读可写)。 |
U | 通用换行模式(不推荐)。 |
r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。 |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 |
rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。 |
w | 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。 |
w+ | 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
wb+ | 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |
2. TXT
with open('movies.txt', 'w', encoding='utf-8') as f:
f.writelines(['名称', '类别', '时间'])
with open('movies.txt', 'w', encoding='utf-8') as f:
f.write('名称')
f.write('类别')
f.write('时间')
3. JSON
json 数据要使用双引号包围起来,而不能使用单引号;
import json
# 读取数据
with open('data.json', encoding='utf-8') as f:
json_data = json.loads(f.read())
json_data = json.load(open('data.json', encoding='utf-8'))
# 导出数据
with open('data.json', mode='w', encoding='utf-8') as f:
f.write(json.dumps(json_data, indent=2, ensure_ascii=False))
json.dump(json_data, open('data.json', mode='w', encoding='utf-8'), indent=2, ensure_ascii=False)
4. CSV
import csv
# 存储数据
with open('data.csv', 'w') as csvfile:
writer = csv.writer(csvfile, delimiter=',')
writer.writerow(['1', '2', '3'])
writer.writerow(['1', '2', '3'])
writer.writerow(['1', '2', '3'])
with open('data.csv', 'w') as csvfile:
writer = csv.DictWriter(csvfile, delimiter=',', fieldnames = ['id1', 'id2', 'id3'])
writer.writeheader()
writer.writerow({
'id1': 1, 'id2': 2, 'id3': 3})
writer.writerow({
'id1': 1, 'id2': 2, 'id3': 3})
writer.writerow({
'id1': 1, 'id2': 2, 'id3': 3})
# 读取数据
with open('data.csv', 'r') as csvfile:
reader = csv.DictReader(csvfile)
for row in reader:
print(row)
# 如果 w 模式中没有使用 newline='' 则会出现空行,不推荐使用,推荐使用 csv.DictReader
with open('data.csv', 'r') as csvfile:
reader = csv.reader(csvfile)
for row in reader:
print(row)
二、数据库存储
1. SQLAlchemy
安装 SQLAlchemy 库:
pip install SQLAlchemy
SQLAlchemy 库相较于 pymysql 库来说,sqlalchemy还包括ORM,可以负责数据转换和类型处理;sqlalchemy ORM 使用 Python 类来表示数据库表,这使得查询和数据处理变得无比容易。此外,sqlalchemy 还支持高级查询和 SQL 语句生成,可以在处理复杂查询时更加便捷。
官网:SQLAlchemy Documentation — SQLAlchemy 2.0 Documentation
drivername | Database |
---|---|
mysql | MySQL |
mysql+mysqldb | MySQL |
mysql+pymysql | MySQL |
oracle | Oracle |
oracle+cx_oracle | Oracle |
mssql+pyodbc | Microsoft SQL Server |
mssql+pymssql | Microsoft SQL Server |
sqlite | SQLite |
postgresql | PostgreSQL |
postgresql+psycopg2 | PostgreSQL |
postgresql+pg8000 | PostgreSQL |
from sqlalchemy import URL, create_engine, text
url_object = URL.create(
drivername="postgresql+pg8000",
username="dbuser",
password="kx@jj5/g", # plain (unescaped) text
host="pghost10",
database="appdb",
)
engine = create_engine(url_object, echo