数据的存储
1、基本文件操作
打开一个文件:f = open('文件', 'w') a=追加模式,r=只读模式,当然也可以加r(二进制的形式)
写入一个文件:write("hello world")
读一个文件:f.read()
2、with 与 open
with open('hello.txt', 'w') as f:
f.write('hello world')
说明:with会自动关闭文件。
3、CSV文件的存取
主要涉及到pandas包的相关操作。
df = pandas.DataFrame(data)
df.to_csv('1.csv, index=None) //可以进行一些参数的设置,比如:mode='a', header=False
df = pandas.read_csv('1.csv') //csv文件的读取
4、JSON文件的存取
"""
json 支持多种格式, str, int, dict,list 等.
json.dumps 代表转字符串,比如字典转为字符串
json.loads 代表转为原本的格式
json.dump 代表把数据写入进去, 比如json.dump(数据, 文件名)
json.load 代表把数据下载下来, 比如json.load(文件名)
"""
import json
data = {'hanzi': '汉字'}
json_str = json.dumps(data, ensure_ascii=False) # 为True时,是ASCII字符; 为False时,原来的格式输出。\
其他字段如排序:sort_key = True, 输出:indet=4(四个字段)
print(json_str) # 在pycharm中体现不出来输出格式为str
5、XLSX文件的存储
(1)xlsxwriter
import os
import pandas as pd
import xlsxwriter
# 为了数据文件和程序文件的分离,我们可以选择新建文件夹,并在此文件夹下进行文件的读写
if 'Myxlsxdata' not in os.listdir():
os.mkdir('Myxlsxdata')
# 切换到此文件夹下
os.chdir('Myxlsxdata')
# 导入数据,只导入需要的列.若有缺失值,显示为NULL
books_data = pd.read_csv('result.csv', usecols=['titles'], na_values='NULL')
titles = books_data['titles']
# 新建文件名为Books.xlsx的电子表格工作薄
workbook = xlsxwriter.Workbook('Books.xlsx')
# 为创建的电子表格增加一个名为表1的表格,默认表名为sheet1, sheet2...
worksheet = workbook.add_worksheet('豆瓣新书')
nums = len(titles) # 数据量
# 第一行写入列名
worksheet.write(0, 0, '图书封面')
# 根据内容设置列宽
worksheet.set_column('A:A', 20)
# 插入图片和文本数据
for i in range(1, nums):
worksheet.insert_image(i, 0, titles[i] + '.jpg')
worksheet.write(i, 1, titles[i])
# 存储数据,关闭工作簿
workbook.close()
## 和pandas连用
import os
import pandas as pd
# 文件夹切换
if 'Myxlsxdata' not in os.listdir():
os.mkdir('Myxlsxdata')
os.chdir('Myxlsxdata')
# 数据1
books_data = pd.read_csv('result.csv', usecols=['titles', 'authors', 'ratings', 'details'], na_values='NULL')
df1 = pd.DataFrame(books_data)
# 以xlsxwriter为引擎,创建writer对象,并初始化文件名为pandas_simple.xlsx
writer = pd.ExcelWriter('pandas_moresheet.xlsx', engine='xlsxwriter')
# 将DataFrame存储到writer里面
df2.to_excel(writer, sheet_name='体测数据')
# 关闭writer对象,并保存写入的数据
writer.save()
# 读取xlsx文件
df = pd.read_excel('pandas_moresheet.xlsx', sheetname='体测数据')
print(df)
6、openpyxl和pandas连用
import os
import pandas as pd
from openpyxl import Workbook
from openpyxl.utils.dataframe import dataframe_to_rows
# 修改工作目录
if 'Myxlsxdata' not in os.listdir():
os.mkdir('Myxlsxdata')
os.chdir('Myxlsxdata')
# 创建数据
data = {'代号': ['A', 'B', 'C', 'D'], '身高': [178, 177, 180, 175], '体重': [65, 70, 64, 67]}
df = pd.DataFrame(data)
# 创建工作簿
wb = Workbook()
# 插入表
ws = wb.create_sheet("体测数据", 0) # 0代表在开头插入,默认在末尾插入
# 插入数据
for r in dataframe_to_rows(df, index=True, header=True):
ws.append(r)
wb.save("pandas_openpyxl.xlsx")
# 读取
df = pd.read_excel('pandas_openpyxl.xlsx')
print(df)
7、MySQL数据库
(1)创建:
create database name character set 'utf8' collate 'utf8_general_ci' // 直接创建uft数据库,最右边的参数可以不设置
(2)改变默认编码:
在MySql下,查看编码:show variables LIKE '%CHAR&'; //默认时latinl,而不是utf8
cd /etc/mysql/my.cnf或/etc/my.cnf:
[client]
default-character-set = utf8
[mysqld]
default-storage-engine = INNODB
character-set-server = utf8
collation-server = utf8_general_ci
重启mysql:service mysql restart
(3)PyMysql的使用:
import pymysql
# 创建连接
db = pymysql.connect(host="localhost", user="root", password="密码", db="PyDataBase", charset='utf8')
# 获取游标,我们用它来执行数据库的操作
cursor = db.cursor()
# 打印列名与列定义
def print_colnames():
cursor.execute("SHOW COLUMNS FROM Py_Create;")
col_names = cursor.fetchall()
print(col_names)
return col_names
# 查询数据
def pritn_alldata():
cursor.execute("SELECT * FROM Py_Create;")
data = cursor.fetchall() # 获取全部数据
print("All data: ", data)
return data
# 执行sql语句
try:
# 删除表
# 在创建新表之前检查是否已经存在此表,若存在则先删除
cursor.execute("DROP TABLE IF EXISTS Py_Create;")
# 创建表
cursor.execute("CREATE TABLE Py_Create(username VARCHAR (10), useraddr VARCHAR (20));")
# 插入数据
cursor.execute("INSERT INTO Py_Create (username,useraddr) VALUES ('员工一', '中国');")
# 打印数据
pritn_alldata()
# 字段与记录的操作
# 记录操作
# 插入就是INSERT语句
# 删除使用where
cursor.execute("DELETE FROM Py_Create WHERE useraddr='美国'")
# 打印数据
pritn_alldata()
# 打印修改前的列
print_colnames()
# 删除列
cursor.execute("ALTER TABLE Py_Create DROP username;")
# 添加列
cursor.execute("ALTER TABLE Py_Create ADD COLUMN (age TINYINT UNSIGNED);")
# 打印修改后的列
print_colnames()
# 关闭cursor
cursor.close()
# 提交上面的增删表和插入数据的操作到数据库
db.commit()
except:
db.rollback()
print("ERROR!")
finally:
# 关闭数据库连接
db.close()