Hello,大家好,我是小张~
在日常与Python打交道过程中,不可避免会涉及到数据读写业务,例如做爬虫时,需要将爬取的数据首先存储到本地然后再做下一步处理;做数据可视化分析时,需要将数据从硬盘中读入内存上,再进行后续的数据清洗、可视化、建模等步骤
对数据进行读写操作时,对于存储对象我们有多种选择,最方便的是本地文档类型:csv、txt等,优点是方便简单、但弊端也很明显:文档型数据易丢失、损坏,删除不可恢复,且不方便多人间数据共享;
另一大类存储对象为数据库,目前比较流性的持久化数据库为MongoDB和Mysql;对比文档存储,数据库最大的优势就是:数据不易丢失且易检索,面对庞大数据量仅几行SQL语句即可实现CRUD(增、读、改、删)功能
在本期Python教程中,将汇总一下有关Python数据读写方式,涉及到的存储对象有四类:txt、csv、MongoDV以及MySQL
2.Python文档读写关于本地文档数据读写,本文列出两类常见文档类型:txt及csv;测试数据来源于链家二手房房源,关于房源数据爬取详情参考旧闻Python采集了条北京二手房数据,看看我都分析出来了啥?
2.1txt读写
在本文介绍的几种数据存储对象中,txt读写是最简单的一种,关于读写方式这里我就不作详细介绍了,不太了解的小伙伴可以参考下方测试代码:
#txt数据源,需记得加上encoding=utf-8参数,防止乱码dataSource=open(data.txt,encoding=utf-8,mode=r)#txt数据读写操作savePath=save.txtf=open(savePath,encoding=utf-8,mode=w+)#读取forlineDataindataSource.readlines():dataList=lineData.replace(\n,).split(,)print(dataList)f.write(\t.join(dataList)+\n)f.close()
txt读写整个流程都是借助文件流方式完成的,需要注意的是在读写过程中若出现中文乱码情况,需要加上参数encoding=utf-8即可有效避免:
2.2csv读写
与txt相比,Python爱好者更偏爱把数据存入csv或xlsx,后者相对更为规范,尤其是面向数值数据,对于编程基础并不好的同学,不需要Python借助Excel可以直接进行可视化分析;
csv在Python中有多种读写方式,下面实例中我列出其中常见的两种,一种是基于python-csv、另一种是基于pandas
csv数据读取
读取测试时,是从csv中读入数据
方法一,借助python-csv读取
#利用python-csv实现数据读取csvPath=save.csvwithopen(csvPath,newline=,encoding=utf-8)ascsvfile:spamreader=csv.reader(csvfile,delimiter=,,quotechar=
)forrowinspamreader:print(,.join(row))
方法二,借助pandas读取
csvPath=save.csvdf=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.csvwithopen(csvPath,w,newline=,encoding=utf-8)ascsvfile:spamwriter=csv.writer(csvfile,delimiter=,quotechar=
,quoting=csv.QUOTE_MINIMAL)forindex,lineDatainenumerate(dataSource.readlines()):dataList=lineData.replace(\n,).split(,)spamwriter.writerow(dataList)
方法二,借助pandas
dataSource=open(data.txt,encoding=utf-8,mode=r)#利用pandas实现csv文件写入csvPath=save.csvdata=[]columnName=[]forindex,lineDatainenumerate(dataSource.readlines()):if(index==0):#第一行作为列名columnName=lineData.replace(\n,).split(,)continuedataList=lineData.replace(\n,).split(,)data.append(dataList)df=pandas.DataFrame(data,columns=columnName)#防止乱码df.to_csv(csvPath,encoding="utf_8_sig",index=False)
关于用Python操作csv文件,个人更喜欢用pandas来处理,在pandas中数据皆以DataFrame或Series类型展示,对于大部分数值计算或统计分析方法都有封装好的函数,直接调用即可,非常方便
关于pandas的基础使用,详情可参考旧文:
Pandas数据处理(一)——几个简单函数掌握!Pandas数据处理(二)——条件筛选与排序!Pandas数据处理(三)—分组聚类(groupby)Pandas数据处理apply()函数的常规用法Pandas基本使用—DataFrame.to_dict()函数使用3Python数据库读写
介绍完Python在本地文档中的读写方式,下面将介绍一下Python在数据库中的处理;这里我选择了MongoDB和MySQL两个比较流行的数据库;在正式介绍之前请确保大家的环境已经配好
3.1MongoDB数据读写
Mongodb是一类面向文档型数据库,属于NoSQL阵营,也就是常说的非关系型数据库,
存储时将数据接受由键值对(key=value)组成,类似于JSON对象;也就是说Python与Mongodb数据交互时,需要以字典形式传递
那如何用Python来连接MongoDB呢?这个不需要我们担心,Python最大的优势就可以依赖庞大的第三方库,借助pymongo可帮我们对MongoDB中的数据实现CRUD业务操作
MongoDB连接初始化
本地端MongoDB下载完成之后,数据库默认端口为,主机地址为loclhost,在进行数据读写之前,需要对数据库完成初始化连接,代码如下
importpymongo#连接数据库,创建数据表myclient=pymongo.MongoClient("mongodb://localhost:")database=myclient["database"]#连接接数据库collection=database["table"]#collection类似于Mysql中的table
代码中"database"、"table"分别表示数据库名、表名,在数据写入时若不存在对应数据库或数据表,MongoDB会自动创建
MongoDB数据写入
之前在介绍MongoDB时,提到它的数据结构由键值对组成,类似于JSON对象;因此在数据插入步骤中,需将数据转化为字典形式(列名作为key,列值作为value),数据样式如下:
数据写入Python代码实现
dataSource=open(data.txt,encoding=utf-8,mode=r)readlines=dataSource.readlines()keys_list=readlines[0].replace(\n,).split(,)forlineDatainreadlines[1:]:dataList=lineData.replace(\n,).split(,)#数据字典格式化dataDict=dict(zip(keys_list,dataList))ifcollection.find_one(dataDict):#插入前判断数据表中是否存在该数据记录;print("Insertdone......")else:#不存在时插入collection.insert_one(dataDict)
数据写入后效果如下,这里GUI工具用的是官方提供的mongo