python对几种数据读写方式
- 对txt的读写
dataSource = open('data.txt',encoding='utf-8',mode='r')
savePath = 'save.txt'
f = open(savePath,encoding='utf-8',mode='w+')# 读取
for lineData in dataSource.readlines():
dataList = lineData.replace('\n','').split(',')
print(dataList)
f.write('\t'.join(dataList) +'\n')
f.close()
当txt作为数据源的时候 要加上encoding=‘utf-8’,防止乱码
- CSV的读取
方法一:*
利用python - csv实现数据读取
csvPath = 'save.csv'
with open(csvPath, newline='',encoding='utf-8') as csvfile:
spamreader = csv.reader(csvfile, delimiter=',', quotechar='|')
for row in spamreader:
print(', '.join(row))
方法二:
利用pandas读取
csvPath = 'save.csv'
df = pandas.read_csv(csvPath,header=0)
print(df)
- CSV数据写入
方法一: 借助python - csv
# txt 数据源,需记得加上 encoding='utf-8' 参数,防止乱码
dataSource = open('data.txt',encoding='utf-8',mode='r')
# 利用 python-csv 实现 csv 文件写入
csvPath = 'save.csv'
with open(csvPath, 'w', newline='',encoding='utf-8') as csvfile:
spamwriter = csv.writer(csvfile, delimiter=' ',
quotechar='|', quoting=csv.QUOTE_MINIMAL)
for index, lineData in enumerate(dataSource.readlines()):
dataList = lineData.replace('\n', '').split(',')
spamwriter.writerow(dataList)
方法二:借助pandas
dataSource = open('data.txt',encoding='utf-8',mode='r')
# 利用 pandas 实现 csv 文件写入
csvPath = 'save.csv'
data = []
columnName = []
for index,lineData in enumerate(dataSource.readlines()):
if(index==0):# 第一行作为列名
columnName = lineData.replace('\n','').split(',')
continue
dataList = lineData.replace('\n','').split(',')
data.append(dataList)
df =pandas.DataFrame(data,columns =columnName)
# 防止乱码
df.to_csv(csvPath,encoding="utf_8_sig",index=False)
MySQL的读写
MySQL属于典型的关系型数据库,数据表间可以通过外键衔接,这样当一个字段在某个表中得到更新,其它相关联数据表中也会进行自动更新,数据增删改查业务逻辑主要通过 SQL 语句完成,python 操控 MySQL 目前有两类库可以使用,MySQLdb 和 pymysql ,两个库操作mysql 方法相似,核心功能都是依赖于 sql 语句,可以认为提供了一个Python 与 MySQL 连接的接口
- MySQL连接的初始化
pymysql 连接 MySQL 时需要配置 ip、端口、用户名、密码、及数据库名称(与 MongoDB 不同的是,MySQL 数据库需要提前创建好)
import pymysql
db_conn = pymysql.connect(host= '127.0.0.1', port= 3306, user= 'root', password= '123456', db= 'db_example')
- MySQL数据插入
向 MySQL 中插入数据时,可以新建一个表,也可以基于原有数据库中的表进行插入,在下面测试代码中我采用的是前者
# 创建 table data_table
sql1 = " drop table if exists %s;"
sql2 ='''CREATE TABLE %s (
title varchar(1000),
community varchar(1000),
citydirct varchar(1000),
houseinfo varchar(1000),
dateinfo varchar(1000),
taglist varchar(1000),
totalprice varchar(1000),
unitprice varchar(1000)
)
'''
try:
with db_conn.cursor() as cursor:
cursor.execute(sql1,"data_table")
cursor.execute(sql2,"data_table")
db_conn.commit()
except Exception as e:
db_conn.rollback()
- MySQL中插入代码
for lineData in dataSource.readlines()[1:]:
dataList = lineData.replace('\n', '').split(',')
# 拼接 sql 插入语句
insert_sql = 'INSERT data_table (title,community,citydirct,houseinfo,dateinfo,taglist,totalprice,unitprice) VALUES ' + \
'("' + '","'.join(dataList) + '")'
print(insert_sql)
# 执行sql 语句
with db_conn.cursor() as cursor:
cursor.execute(insert_sql)
# 关闭数据库
db_conn.close()
**注意:**pymysql 操作 MySQL 需要注意的是,每执行完 一条或多条 sql 语句时,需要 commit() 一下,否则执行无效
cursor.execute(sql2,"data_table")
db_conn.commit()