点击蓝字

关注我们

前面说过Python爬取的数据可以存储到文件、关系型数据库、非关系型数据库。前面两篇文章没看的,可快速戳这里查看!《使用Python将数据存入SQLite3数据库》

《基于Python的SQLite基础知识学习》而存储到文件的数据一般都具有时效性,例如股市行情、商品信息和排行榜信息等等。这样的信息是具有动态性的,非特殊要求,可以存放到文件中,下面让我们来看一下存入文件的几种方法,文章有点长,但全是干货,请耐心看完。

Txt文件存储

将数据保存到TXT文件很简单,使用如下语法即可打开一个文件写入数据。

with open('test.txt','w',encoding='utf-8') as file:

file.write()
这里来看一个例子:爬取知乎上“发现”页面的热门话题部分,将问题和答案统一保存为txt格式。

import requests

#使用requests库将网页源码获取下来

from pyquery import PyQuery as pq

#使用pyquery解析库解析

url = 'http://www.zhihu.com/explore'

headers = {

'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.92 Mobile Safari/537.36'

}

html = requests.get(url,headers = headers).text

doc = pq(html)

items = doc('.explore-tab .feed-item').items()

for item in items:

question = item.find('h2').text()

author = item.find('.author-link-line').text()

answer = pq(item.find('.content').html()).text()

with open('test.txt','w',encoding='utf-8') as file:

file.write('\n'.join([question,author,answer]))

file.write('\n' + '=' * 50 + '\n')

如下图所示,可以看到这篇文章已经写入文本文件了。

JSON文件存储

JSON(javaScript Object Notation,也就是JavaScript对象标记)

JSON是通过数组和对象的组合来表示数据,构造简洁但结构化程度非常高,是一种轻量级的数据交换格式。Python为我们提供了简单易用的 JSON库来实现JSON文件的读写操作,我们可以调用 JSON loads()方法将JSON文本字符串转为JSON对象,可以通过 dumps()方法将 JSON 对象转为文本字符串,具体看下面代码。

import json

str = '''[{

"name":"Bob",

"gender":"male",

"birthay":"1992-10-18"

} , {

"name":"Selina",

"gender":"female",

"birthdat":"1995-10-18"

}]'''

print(type(str))

data = json.loads(str)

print(data)

print(type(data))

另外我们可以使用dumps()方法将JSON对象转化为字符串,如下图所示。

import json

data = [{

'name':'Bob',

'gende':'male',

'birthday':'1992-10-18'

}]

with open ('data.json','w') as file:

#如果想保存为JSON格式的,可以在加一个参数indent=2即可。

file.write(json.dumps(data))

#加参数后的data.json文件内容如下

'''

[

{

"name": "Bob",

"gende": "male",

"birthday": "1992-10-18"

}

]

'''

还有一种常见的问题,若JSON文件包含中文字符呢?这样打开肯定会出现乱码的,那么我们该怎么办呢?看下面代码。

import json

data = [{

'name':'小马',

'gende':'女',

'birthday':'1994-12-30'

}]

with open ('data.json','w') as file:

file.write(json.dumps(data,indent=2))

看到这样的内容,肯定不是我们想要的结果啊,中文字符都变成了Unicode字符,那么,为了显示中文字符,还需要指定参数ensure_asci为 False,另外还需要规定输出文件的编码。这样就可以完美的将中文显示出来了,如下图所示。

with open('data.json','w',encoding='utf-8') as file:

file.write(json.dumps(data,indent=2,ensure_ascii=False))

CSV文件存储

CSV(Comma-Separated Values),中文可成为逗号分隔值或字符分隔值,其文件以纯文本形式存储表格数据。

Python标准库自带CSV模块,不用自行安装,直接导入即可,代码如下。

import csv

#这里如若文件存在则直接打开,不存在可自动创建,若不设置newline = ''每行数据会隔一行空白行

with open('csv_test.csv','w',newline = '') as csvfile:

#将文件加载到CSV对象中

write = csv.writer(csvfile)

#写入一行表头数据

write.writerow(['姓名','年龄','电话'])

#多行数据写入

data = {('zhangsan','15','13809391234'),('lisi','25','13512340000')}

#关闭CSV对象

write.writerows(data)

写数据到CSV使用open函数便可打开文件,那么读CSV数据则使用reader和DictReader,两者都是接收一个可迭代的对象,返回一个生成器。reader函数返回是将一行数据以列表形式返回,而DictReader函数返回的是一个字典,字典的值是单元格的值,字典的键则是这个单元格的标题,具体可看如下代码。

import csv

csvfile = open ('csv_test.csv','r')

#以列表形式输出

reader = csv.reader(csvfile)

#以字典形式输出,第一行作为字典的键

#reader1 = csv.DictReader(csvfile)

rows = [row for in reader]

print(rows)

#以下为输出结果

#[['姓名', '年龄', '电话'], ['zhangsan', '15', '13809391234'], ['lisi', '25', '13512340000']]

#以字典的形式输出,第一行作为字典的键

import csv

csvfile = open('csv_test.csv','r')

reader = csv.DictReader(csvfile)

for row in reader:

print(row)

#以下为输出结果

#OrderedDict([('姓名', 'zhangsan'), ('年龄', '15'), ('电话', '13809391234')])

#OrderedDict([('姓名', 'lisi'), ('年龄', '25'), ('电话', '13512340000')])

以上代码实现了将整个文件数据全部打印出来了,在实际数据中这也不太现实,我们可能会获取某行的数据,则可以使用循环全部数据再对每行数据进行判断,符合条件的数据筛选出来,具体代码如下。

import csv

csvfile = open('csv_test.csv','r')

#以列表形式输出

reader = csv.reader(csvfile)

for row in reader:

if 'lisi' in row:

print(row)

#以下是输出结果

#['lisi', '25', '13512340000']

如果你接触过pandas的话,使用起来也很方便

>>> import pandas as pd

>>> df = pd.read_csv('csv_test.csv',encoding ='gb2312')

>>> print(df)

姓名  年龄           电话

0  zhangsan  15  13809391234

1      lisi  25  13512340000

>>>


值得注意的是这里可能会出现乱码,需要指定字符编码,csv文件的编码为gb2312或utf-8时,指定编码格式pd.read_csv(name, encoding='gb2312')可解决乱码问题;如果编码格式为utf-8,则另存为txt文件,pd.read_table(name) 不用指定编码格式,也可以解决乱码问题。


使用CSV存储数据相对而言还是简单的,这个也是经常使用的方式,实用性很强,小伙伴要掌握哦,下面顺道说一下EXCEL格式数据的读写。

Excel文件存储

python操作Excel时,对应的有不同的版本支持库,若Excel为2003时,需选择pyExcelerator;若Excel为2007时,需选择openpyxl;而xlrd库支持所有版本的数据读取,xlwt库支持所有版本的数据写入。

所以,考虑到兼容性一般都选择使用 xlrd和xlwt,Windows环境CMD下直接使用pip安装即可。

pip3 install xlrd

pip3 install xlwt

将数据写入到Excel是比较复杂的,有格式以及公式、插入图片等的功能,下面直接看写入Excel的语法。

import xlwt

#新建一个Excel文件

wb = xlwt.Workbook()

#在新建的文件中新建一个名为Python的工作簿

ws = wb.add_sheet(‘Python’,cell_overwrite_ok=True)

#定义字体对齐方式对象

alignment = xlwt.Alignment()

#设置水平方向

#HORZ_GENERAL,HORZ_LEFT,HORZ_CENTER,HORZ_RIGHT,HORZ_FILLED

#HORZ_JUSTIFIED,HORZ_CENTER_ACROSS_SEL,HORZ_DISTRIBUTED

alignment.horz = xlwt.Alignment.HORZ_CENTER

#设置垂直方向

#VERT_TOP,VERT_CENTER,VERT_BOTTOM,VERT_JUSTIFIED,VERT_DISTRIBUTED

alignment.vert = xlwt.Alignment.VERT_CENTER

#定义格式对象

style = xlwt.XFStyle()

style.alignment = alignment

#合并单元格write_merge(开始行,结束行,开始列,结束列,内容,格式)

ws.write_merge(0,0,0,5,'Python数据存储',style)

#写入数据we.write(行,列,内容)

for i in range(2,7):

for k in range(5):

ws.write(i,k,i+k)

#Excel公式xlwt.Formula

ws.write(i,5,xlwt.Formula('SUM(A'+srt(i+1)+ ':E'+str(i+1)+')'))

#wb.save('file.xls')

#插入bmp格式图片,insert_bitmap(img,x,y,x1,y1,scale_x=0.8,scale_y=1)

#x表示行数,y表示列数,x1表示相对原来位置向下偏移的像素,y1表示相对原来位置像右偏移的像素,scale_x、scale_y表示缩放比例

ws.insert_bitmap('G:\\img.bmp',9,1,2,2,scale_x=0.3,scale_y=0.3)

#保存文件

wb.save('file.xls')

Excel中还有其他的单元格颜色,单元格边框,字体颜色,字体大小,数据类型等等,这里就不展开描述了,下面来看看Excel读取数据。

读取数据需要第三方库 xlrd 来实现,具体代码如下。

import xlrd

wb = xlrd.open_workbook('file.xls')

#获取工作簿的zongshu

ws_count = wb.nsheets

print('Sheets总数:',ws_count)

#通过索引顺序获取Sheets

#ws = wb.sheets() [0]

#ws = wb.sheet_by_index(0)

#通过Sheets名获取Sheets

ws = wb.sheet_by_name('Python')

#获取整行的值,以列表形式返回

row_value = ws.row_values(3)

print('第四行数据为:',row_value)

#获取整列的值,以列表形式返回

row_col = ws.col_values(3)

print('D列的数据为:',row_col)

#获取所有的lie

nrows = ws.nrows

ncols = ws.ncols

print('总行数为:',nrows,'总列数为:',ncols)

#获取某个单元格内容cell(行,列)

cell_F3 = ws.cell(2,5).value

print('F3单元格内容为:',cell_F3)

#使用行列索引获取某个单元格的内容

row_F3 = ws.row(2)[5].value

col_F3 = ws.col(5)[2].value

print('F3单元格的内容为:',row_F3, '\n'  'F3单元格的内容为:',col_F3)

看到这里,顺便在说一下怎么把数据存储到Word中,Word文档中存储的一般为文章、新闻报道和小说这类文字内容较长的数据。

Word数据存储

Python读取Word也是需要第三方扩展库来支持,使用pip install python-docx安装即可。

下面通过例子说明怎么使用Python读取数据吧,废话不多说,直接看代码。

from  docx  import Document

from  docx.shared import Inches

#创建对象

document = Document()

#添加标题,其中'0'代表标题类型,一共有4种类型,具体可在Word的开始菜单,样式下查看

document.add_heading('Python爬虫基础学习',0)

#添加正文内容并设置部分内容格式

p = document.add_paragraph('Python爬虫-')

#设置内容加粗

p.runs[0].bold = True

#添加内容并加粗

p.add_run('数据存储-').bold =  True

#添加内容

p.add_run('Word-')

#添加内容并设置为斜体

p.add_run('存储实例。').italic = True

#添加正文,设置“样式”——> "明显引用"

document.add_paragraph(“样式-明显引用”,style = 'IntenseQuote')

#添加正文,设置“项目符号”

document.add_paragraph(

'项目符号1',style = 'ListBullet'

)

document.add_paragraph(

'项目符号2',style = 'ListNumber'

)

#添加图片

document.add_picture('G:\\img.bmp',width = Inches(1.25))

#添加表格

table = document.add_table(rows = 1, cols = 3)

hdr_cells = table.rows[0].cells

hdr_cells[0].text = 'Qty'

hdr_cells[1].text = 'Id'

hdr_cells[2].text = 'Desc'

for item in range(2):

row_cells = table.add_row().cells

row_cells[0].text = 'a'

row_cells[1].text = 'b'

row_cells[2].text = 'c'

#保存文件

document.add_page_break()

document.save('test.docx')

通过以上代码便将数据写入到Word,最终结果如下图所示。

最后在看一眼怎么读取Words文件数据,这个就相对比较简单了,不用设置格式,直接读取即可,代码如下所示。

#读取数据

import docx

def readDocx(docName):

fullText = []

doc = docx.Document(docName)

#读取全部内容

paras = doc.paragraphs

#将每行数据存储到列表

for p in paras:

fullText.append(p.text)

#将列表数据转换成字符串

return '\n'.join(fullText)

print(readDocx('test.docx'))

通过上图看出,Word中的图片以及表格使用此方法是没法读取的,还是不尽如人意啊!

那么本周分享就到这里了,内容有点多,慢慢消化哦,下次分享怎么将数据存储到MySQL数据库,小伙伴们准备好小板凳继续加油哦!!!

参考资料:黄永祥.清华大学出版社《玩转Python网络爬虫》第九章.文档数据存储

ertert

往期精彩回顾

Windows环境下基于Anaconda的Python3安装

使用Python爬取《悲伤逆流成河》猫眼信息

(端午节福利)各大影视VIP解析视频观看方法

让我们来聊一聊微信(基于Python分析)

推荐一个好用的PDF阅读器—悦书阅读器

基于Python的SQLite基础知识学习

使用Python将图片变成铅笔素描 

欢迎关注此公众号,写作不易,您的关注与点赞将是我不断写作的动力,点击最上方蓝字关注我吧!如果觉得此文对您有帮助,欢迎点赞、分享、转发!

▼更多精彩内容,请长按二维码▼

基于Python操作将数据存储到本地文件相关推荐

  1. Python爬取数据存储到本地文本文件

    前面说过Python爬取的数据可以存储到文件.关系型数据库.非关系型数据库.前面两篇文章没看的,可快速戳这里查看!https://mp.weixin.qq.com/s/A-qry4r3ymuCLXLB ...

  2. python mysql返回,python操作mysql数据-执行语句返回值直接返回字典类型

    fetchall()将结果放在二维数组里面,每一行的结果在元组里面 import pymysql def export(table_name): conn =pymysql.connect(host ...

  3. 基于python的分布式扫描器_一种基于python的大数据分布式任务处理装置的制作方法...

    本发明涉及数据处理技术,具体是一种基于python的大数据分布式任务处理装置. 背景技术: 本发明提供一种分布式队列任务处理方案和装置,该方法可以提供分布式处理python任务,任务类型包括爬虫及其他 ...

  4. 基于Python的多时相数据合成

    文中的示例代码及数据可关注公众号回复20230105下载,公众号二维码见文末. 1 多时相数据合成 由于云覆盖.季节积雪.传感器故障等多种因素的影响,导致从遥感数据中提取的地表参数存在空间分布上的数据 ...

  5. 基于Python操作ElasticSearch

    基于Python操作ElasticSearch 原文:https://blog.csdn.net/hanyuyang19940104/article/details/81168763?utm_sour ...

  6. 安卓androidstudio访问本地接口_安卓开发之数据存储在本地的四种方式

    ​ 安卓开发之数据存储在本地的四种方式 本地数据存储,在安卓开发过程中是不可避免的一个话题.这些本地的数据可能是用户的设置,程序的设置,用户的数据图片, 也可能是网络传输的一些缓冲数据. 基本上我们有 ...

  7. 基于HBase的大数据存储在京东的应用场景

    引言 HBase是一个高可靠性.高性能.面向列.可伸缩的分布式存储系统,适用于结构化的存储,底层依赖于Hadoop的HDFS,利用HBase技术可在廉价PCServer上搭建起大规模结构化存储集群.因 ...

  8. 读取股票数据存储到本地MySQL数据库(三)

    此篇是将上篇获取到的股票数据存储到本地mysql数据库. mysql是关系型数据库,为Oracle旗下产品,开源免费.首先下载mysql的安装包,安装完成后设置数据库并启动服务,然后可以通过Navic ...

  9. python 获取excel文本框_如何基于python操作excel并获取内容

    这篇文章主要介绍了如何基于python操作excel并获取内容,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 背景:从excel表中获取请求url. ...

最新文章

  1. python3.6爬虫环境安装要多少内存_Python3爬虫环境配置——解析库安装(附tesserocr安装方法)...
  2. 支付宝回应“崩了”:机房网络出现短暂抖动,已恢复正常
  3. ubuntu执行编译好的文件显示文件不存在_嵌入式开发 | 什么是交叉编译(CROSS_COMPILE)...
  4. OpenFoam2.4.0 cannot find input file: `contrib/dist/mofed/debian/changelog解决方案
  5. request.form以及postman发送表单数据
  6. 基于Spring+SpringMVC+Mybatis架构的开源博客
  7. 健康身心态的10条法宝
  8. 数据库-几个重要的数据库相关概念
  9. 超定方程组的householder变换求解matlab实现
  10. Maple 教程 何青,科学出版社
  11. STM32+AD7705实现电压采集
  12. Python实现多线程并发下载大文件(断点续传支持)
  13. 51单片机彩灯控制器的设计(含源代码、编译过的 HEX 文件以及仿真图)
  14. Modbus通信协议
  15. php开源 饭馆记账软件_个人记账软件 - 开源免费
  16. 计算机专业的学生买什么电脑,设计类学生买什么电脑
  17. Delphi Web前端开发教程(2):基于TMS WEB Core框架
  18. JS如何手写new(一看就懂)
  19. MACOS 苹果系统 微信多开
  20. 【母亲节】特地收集向日葵远程控制、万年历等五款软件作为送给母亲的实用礼物

热门文章

  1. python的web应用框架_python应用webpy框架
  2. 从门外汉到一线互联网公司开发,我的经历可能有你想知道的答案!
  3. linux系统sln命令,dotnet sln
  4. CSS3------什么是css
  5. Sicily 1140 国王的遗产(搜索|图论)
  6. excel的countif函数常见错误
  7. 2022-2028全球子宫托行业调研及趋势分析报告
  8. 2020年基金从业资格证考试该怎么考?怎么复习?
  9. ASP.NET - ASP.NET 服务器控件验证类型 - RangeValidator 类
  10. DropDownList 控件不能触发SelectedIndexChanged 事件