目录
1.文本文件数据存储
python中所有open()打开一个文件,文件的打开有很多模式:
模式 | 说明 |
r | 以只读方式打开文件,文件的指针将会放在文件的开头,这是默认模式。 |
rb | 以二进制只读方式打开一个文件,文件指针将会放在文件的开头。 |
r+ | 以读写方式打开一个文件,文件指针将会放在文件的开头。 |
rb+ | 以二进制读写方式打开一个文件,文件指针将会放在文件的开头。 |
w | 以写入方式打开一个文件。如果该文件已存在,则将其瞿盖;如果该文件不存在,则创建新文件。 |
wb | 以二进制写入方式打开一个文件。如果该文件已存在,则将其覆盖;如果该文件不存在,则创建新文件。 |
w+ | 以读写方式打开一个文件。如果该文件已存在,则将其覆盖;如果该文件不存在,则创建新文件。 |
wb+ | 以二进制读写格式打开一个文件。如果该文件已存在,则将其覆盖;如果该文件不存在, 则创建新文件。 |
a | 以追加方式打开一个文件。如果该文件已存在,文件指针将会放在文件结尾。也就是说,新的内容将会被写入到已有内容之后;如果该文件不存在, 则创建新文件来写入。 |
ab | 以二进制追加方式打开一个文件。如果该文件已存在,则文件指针将会放在文件结尾。也就是说,新的内容将会被写入到己有内容之后;如果该文件不存在,则创建新文件来写入。 |
a+ | 以读写方式打开一个文件。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式;如果眩文件不存在,则创建新文件来读写。 |
ab+ | 以二进制追加方式打开一个文件。如果该文件已存在,则文件指针将会放在文件结尾;如果该文件不存在,则创建新文件用于读写。 |
2.json文件存储
JSON,全称为 JavaScript Object Notation, 也就是 JavaScript 对象标记,它通过对象和数组的组合来表示数据,构造简洁但是结构化程度非常高,是一种轻量级的数据交换格式。
2.1 对象和数组
对象:它在 JavaScript 中是使用花括号 {} 包裹起来的内容,数据结构为 {key1:value1, key2:value2,...} 的键值对结构。在面向对象的语言中,key 为对象的属性,value 为对应的值。键名可以使用整数和字符串来表示。值的类型可以是任意类型。
数组:数组在 JavaScript 中是方括号 [] 包裹起来的内容,数据结构为 ["java", "javascript", "vb", ...] 的索引结构。在JavaScript 中,数组是一种比较特殊的数据类型,它也可以像对象那样使用键值对,但还是索引用得多。同样,值的类型可以是任意类型。
2.2 json模块方法
方法 | 作用 |
---|---|
json.dumps() | 把python对象转换成json对象的一个过程,生成的是字符串。 |
json.dump() | 用于将dict类型的数据转成str,并写入到json文件中 |
json.loads() | 将json字符串解码成python对象 |
json.load() | 用于从json文件中读取数据。 |
3.表格文件存储
3.1 CSV写入
3.1.1 单行写入
调用 csv 库的writer 方法
import csv
with open('data.csv', 'w') as csvfile:
writer = csv.writer(csvfile,delimiter=',') # delimiter 以 ,分割
writer.writerow(['id', 'name', 'age'])
writer.writerow(['10001', 'LiMing', 20])
writer.writerow(['10002', 'LiHua', 22])
writer.writerow(['10003', 'WangMei', 21])
3.1.2 多行写入
调用csv库的 writerows 方法同时写入多行,此时参数就需要为二维列表
import csv
with open('data.csv', 'w') as csvfile:
writer = csv.writer(csvfile)
writer.writerow(['id', 'name', 'age'])
writer.writerows([['10001', 'LiMing', 20], ['10002', 'LiHua', 22],['10003', 'WangMei', 21]])
3.1.3 字典写入
调用csv库的DictWriter方法
import csv
with open('data.csv', 'w') as csvfile:
fieldnames = ['id', 'name', 'age']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
writer.writerow({'id': '10001', 'name': 'LiMing', 'age': 20})
writer.writerow({'id': '10002', 'name': 'LiHua', 'age': 22})
writer.writerow({'id': '10003', 'name': 'WangMei', 'age': 21})
3.2 CSV读取
3.2.1 读取为列表
调用csv的reader()方法
with open('studet.csv','r') as f:
csv_read = csv.reader(f)
#循环打印
for i in csv_read:
print(i)
3.2.2 读取为字典
调用csv的DictReader()方法
with open('student.csv','r') as f:
csv_read = csv.DictReader(f)
for i in csv_read:
print(i)
3.2 EXCEL 写入
3.2.1 使用openpyxl 库
import openpyxl
# 创建一个新的Excel工作簿
workbook = openpyxl.Workbook()
# 获取默认的工作表
sheet = workbook.active
# 写入数据
sheet['A1'] = '姓名'
sheet['B1'] = '年龄'
sheet['C1'] = '班级'
# 添加一行数据
sheet.append(['LiMing', 25,'三班'])
# 保存工作簿
workbook.save('student.xlsx')
3.2.2 使用pandas库
使用 pip install pandas 下载pandas库
import pandas as pd
# 创建一个DataFrame
data = {'姓名': ['LiMing', 'LiHua','WangMei'],
'年龄': [20, 21, 20],
'班级':['1班','3班','2班']
}
df = pd.DataFrame(data)
# 将DataFrame写入Excel文件
df.to_excel('student.xlsx', index=False)
3.2.3 使用xlwt和xlrd库
import xlwt
# 创建一个工作簿
workbook = xlwt.Workbook()
# 添加一个工作表
sheet = workbook.add_sheet('student')
# 写入数据
sheet.write(0, 0, '姓名')
sheet.write(0, 1, '年龄')
sheet.write(0, 2, '班级')
sheet.write(1, 0, 'LiMing')
sheet.write(1, 1, 20)
sheet.write(1, 2, '三班')
# 保存工作簿
workbook.save('student.xlsx')
4.MYSQL存储
4.1 连接数据库
import pymysql
def db_connect():
# 打开数据库连接
db = pymysql.connect(host="localhost", user="root", password="root")
# 使用cursor()方法创建一个游标对象cursor
cursor = db.cursor()
# 使用execute()方法执行SQL查询
cursor.execute("SELECT VERSION()")
# 使用 fetchone() 方法获取单条数据
data = cursor.fetchone()
# data返回值为一个元组
# 创建数据库
cursor.execute("CREATE DATABASE spiders DEFAULT CHARACTER SET utf8")
# 关闭数据库连接
db.close()
def main():
db_connect()
if __name__ == "__main__":
main()
4.2 创建数据库
import pymysql
def create_table():
db = pymysql.connect(host="localhost", user="root", password="root", db="spider")
# 使用 cursor() 方法创建一个游标对象cursor
cursor = db.cursor()
# 使用预处理语句创建表
sql = '''
CREATE TABLE IF NOT EXISTS students (
id VARCHAR(255) NOT NULL,
name VARCHAR(255) NOT NULL,
age INT NOT NULL,
PRIMARY KEY (id))
'''
try:
cursor.execute(sql)
print("CREATE TABLE SUCCESS.")
except Exception as e:
print(f"CREATE TABLE FAILED,CASE:{e}")
finally:
# 关闭数据库连接
db.close()
def main():
create_table()
if __name__ == "__main__":
main()
4.3 插入数据
import pymysql
id = '00001'
user = 'LiMing'
age = 20
def insert_record():
db = pymysql.connect(host='localhost', user='root', password='root', db='spiders')
# 获取游标
cursor = db.cursor()
# SQL 插入语句
sql = 'INSERT INTO students(id, name, age) values(%s, %s, %s)'
# 执行 SQL 语句
try:
cursor.execute(sql, (id, user, age))
# 提交到数据库执行
db.commit()
except Exception as e:
# 如果发生错误就回滚
db.rollback()
finally:
# 关闭数据库连接
db.close()
if __name__ == '__main__':
insert_record()
5.MongoDB存储
5.1 连接数据库
import pymongo
client = pymongo.MongoClient(host='localhost', port=27017)
collection = client['student']
5.2 插入数据
5.2.1 插入单条数据
# 插入单条数据
student = {'id': '100010', 'name': 'LiMing', 'age': 20, 'gender': '男' }
result = collection.insert_one(student)
5.2.2 插入多条数据
# 插入多条数据
student1 = { 'id': '100010', 'name': 'LiMing', 'age': 20, 'gender': '男' }
student2 = { 'id': '100011', 'name': 'LiHua', 'age': 21, 'gender': '女' }
collection.insert_many([student1, student2])