1.文本存储

比如我们现在有10篇文章,每篇文章由三部分组成,题目,作者,内容(title,author,content),然后要求这三个部分明确展示出来,并且每篇文章之间用=====分割。

大致思路:

针对每篇文章的三个部分,前两个部分归为一行,然后每篇文章之间用=====分割。

代码实现

items表示那10篇文章每一篇文章用item表示,则有,

for item in items:
title=item[0]
author=item[1]
content=item[2]
insertlist=[title,author,content]
with open("1.text",'a',encoding='utf-8') as fs:
fs.write('\n'.join(insertlist)) #构建列表,用join的分割符用\n
fs.write('\n'+'='*60='\n')

2.Json的存储

千万要注意,json字符串需要用双引号

import json
with open('data.json','w','encoding='utf-8') as fs:
fs.write(json.dumps(data,indent=2,ensure_ascii=False))

其中indent,代表缩进字符个数,如果不加就没有json的层次感了,json.dumps 序列化时对中文默认使用的ascii编码.想输出真正的中文需要指定ensure_ascii=False。

3.CSV的存储

利用python第三方模块pandas,调用DataFrame对象的to_csv方法将数据保存到csv

import pandas as pd
df=pd.DataFrame(字典字典类型的数据)
df.to_csv('weiboi.csv', encoding='gb2312', index = False) #insert into csv

4.mysql-动态sql语句

传入一个动态变化的字典即可。

比如说一开始的时候我们有这样的一个表叫user,需要保存三个字段id,name,age然后我们可以构建下面的字典和表名

d={'id':'1001','name':'zhangsan','age':'17'}  

tables='user'

d={'id':'1001','name':'zhangsan','age':'17'}  

tables='user'
keys=','.join(d.key())
values=','.join(['%s']*len(d))
sql=f'INSERT INTO {table}({keys})VALUES({values})'
try:
if cursor.execute(sql,tuple(d.values())):
print('ok')
db.commit()
except:
print('no')
db.rollback()
db.close()

现在我们就完成了插入操作,但是有的时候我们需要 主键存在是更细,不存在时插入怎么办呢,首先我们看下面语句

INSERT INTO user(id,name,age) VALUES(%s,%s,%s) ON DUPLICATE KEY UPDATE id=%s,name=%s,age=%s

ON DUPLICATE KEY UPDATE 可以达到以下目的:

向数据库中插入一条记录:

若该数据的主键值/ UNIQUE KEY 已经在表中存在,则执行更新操作, 即UPDATE 后面的操作。

否则插入一条新的记录。

然后我们对上面整体做一个代码整理。如下

d={'id':'1001','name':'zhangsan','age':'17'}  

tables = 'name'
keys = ','.join(data_dic.keys())
values = ','.join(['%s'] * len(data_dic))
sql =f'INSERT INTO {tables}({keys})VALUES({values}) ON DUPLICATE KEY UPDATE '
update = ','.join([f"{k}={v}" for k,v in data_dic.items()])
sql += update
try:
if cursor.execute(sql,tuple(d.values())):
print('ok')
db.commit()
except:
print('no')
db.rollback()
db.close()

  

同样的如果你懂pandas,你可以这样

 pd.io.sql.to_sql(datatosql, 'tablename', yconnect, schema='ptos', if_exists='append')

python数据存储技巧的更多相关文章

  1. python数据存储--JSON

    HTML正文存储为两种格式:JSON和CSV. 存储为JSON: 首先利用Requests访问http://seputu.com获取HTML文档: #!coding:utf-8 import requ ...

  2. Python数据存储:pickle模块的使用讲解

    在机器学习中,我们常常需要把训练好的模型存储起来,这样在进行决策时直接将模型读出,而不需要重新训练模型,这样就大大节约了时间.Python提供的pickle模块就很好地解决了这个问题,它可以序列化对象 ...

  3. python数据存储-- CSV

    CSV,其文件以纯文本形式存储表格数据(数字和文本),CSV记录简由某种换行符分隔字段间分隔又其他字符,常见逗号或者制表符, 例如: #coding:utf-8 import csv headers ...

  4. [转]pickle python数据存储

    python的pickle模块实现了基本的数据序列和反序列化.通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储:通过pickle模块的反序列化操作,我们能够从文件 ...

  5. Python数据存储 — MySQL数据库操作

    本地安装MySQL 调试环境python3.6,调试python操作mysql数据库,首先要在本地或服务器安装mysql数据库. 安装参考:https://mp.csdn.net/postedit/8 ...

  6. Python - 数据存储与数据库简介

  7. Python多线程爬虫与多种数据存储方式实现(Python爬虫实战2)

    1. 多进程爬虫 对于数据量较大的爬虫,对数据的处理要求较高时,可以采用python多进程或多线程的机制完成,多进程是指分配多个CPU处理程序,同一时刻只有一个CPU在工作,多线程是指进程内部有多个类 ...

  8. python轻量级数据存储

    python为开发者提供了一个轻量级的数据存储方式shelve,对于一些轻量数据,使用shelve是个比较不错的方式.对于shelve,可以看成是一个字典,它将数据以文件的形式存在本地.下面介绍具体用 ...

  9. Python爬虫框架Scrapy实例(三)数据存储到MongoDB

    Python爬虫框架Scrapy实例(三)数据存储到MongoDB任务目标:爬取豆瓣电影top250,将数据存储到MongoDB中. items.py文件复制代码# -*- coding: utf-8 ...

随机推荐

  1. 从JDK源码角度看线程的阻塞和唤醒

    目前在Java语言层面能实现阻塞唤醒的方式一共有三种:suspend与resume组合.wait与notify组合.park与unpark组合.其中suspend与resume因为存在无法解决的竟态问 ...

  2. [问与答]怎样在 Android Stuido中删除一个project

    sof Remove Project from Android Studio 问 第一次用Android Stuido,建立一个项目,却不知道怎么删除? 答 大概有3种方式 方式一 (简单实用) 点击 ...

  3. Dynamics CRM 系统自定义部分的语言翻译

    Dynamics CRM 自带语言切换功能,在官网下载所需语言包安装后,在设置语言中就能看到你所添加的语言,勾选要启用的语言应用即可,再打开系统设置--语言就能看到可更改用户界面语言的显示了. 但官方 ...

  4. 使用GDAL将下载的Google卫星图像转为带坐标的tif

    网上有很多下载Google地图的卫片的软件,一般下载下来的图像都是jpg格式的,另外附带一个坐标信息的描述文件.这样的数据不能直接拿来在遥感或者GIS软件中使用,因为图像里面没有投影和坐标信息,所以就 ...

  5. Linux下编译GDAL

    一.准备工作 从官网下载GDAL.PROJ.4和GEOS,将其存放在/home/liml/Work/3rdPart目录并解压,如下图所示.下载地址请自行Google.注:使用的系统是CentOS6.4 ...

  6. eclipse搭建ssh后台

    SSH框架是最常用的框架之一,在搭建SSH框架的时候总有人遇到这样,那样的问题.下面我介绍一下SSH框架搭建的全过程.  第一步:准备工作.    下载好eclipse,Struts2,Spring, ...

  7. 演练Ext JS 4.2自定义主题

    本文将根据API文档中关于主题的介绍做的一次演练,以便熟悉自定义主题的过程. 练习环境: Sencha Cmd v4.0.1.45 Ruby 1.9.3-p392 firefox 26 首先,使用以下 ...

  8. Ubuntu14.04安装Matlab2013a

    source url: http://blog.sina.com.cn/s/blog_ec5021d60102v3ky.html 1. 为方便操作,把Matlab镜像文件(iso)重命名为'Matla ...

  9. 网站开发进阶(二十)JS中window.alert()与alert()的区别

    JS中window.alert()与alert()的区别 前言 alert与window.alert没什么区别,如果有人觉得有区别,那就来解释一下:所有以window.开始的语句,都可以直接把wind ...

  10. java面试之常见编程题

    1.编程实现:二分搜索算法 解答: public class SearchTest { /** 被搜索数据的大小 */ private static final int size = 5000000; ...