python 内存数据库下载,Python 文件存储和数据库

Python 中数据存储的方式和其他语言没什么区别,主要分为两个方面:文件存储和数据库存储。

文件存储

文件存储的方法也分为很多种,主要包括:Python 内置方法

NumPy 模块方法

os 模块方法

csv 模块方法

Python 内置方法

在不需要借助任何外界库的前提下,python 内置方法其实也可以完成我们需要的文件存取任务:

open() 方法file object = open(file_name [, access_mode][, buffering])

该方法意义在于按照指定模式打开文件,其中,各个参数的含义如下:file_name:file_name 变量是一个包含了你要访问的文件名称的字符串值。

access_mode:access_mode决定了打开文件的模式:只读,写入,追加等(可选,默认为只读)。

buffering: 如果 buffering 的值被设为 0,就不会有寄存。如果 buffering 的值取 1,访问文件时会寄存行。如果将 buffering 的值设为大于 1 的整数,表明了这就是的寄存区的缓冲大小。如果取负值,寄存区的缓冲大小则为系统默认。

简单示例:

12345#!/usr/bin/python

# -*- coding: UTF-8 -*-

file = open('tttt.py')

print(file.read())

这是一个最简单的读取文件, 上面我们实际上使用的是一个相对路径,当然我们也可以使用绝对路径:

12345#!/usr/bin/python

# -*- coding: UTF-8 -*-

file = open('C:\\Users\\Administrator\\Desktop\\tttt.py')

print(file.read())

我们常用 / 来表示相对路径,\ 来表示绝对路径,上面的路径里 \\ 是转义的意思。

接下来我们再来看看第二个参数如何使用,第二个参数是文件的打开模式,可用的模式有如下几个:字符意义r读取(默认)

w写入,并先截断文件

x排它性创建,如果文件已经存在则失败

a写入,如果文件存在则在末尾追加

b二进制模式

t文本模式(默认)

+打开用于更新(读取与写入)

默认模式为 r (打开用于读取文本,与 rt 同义)。 模式 w+ 与 w+b 将打开文件并清空内容。 模式 r+ 与 r+b 将打开文件并不清空内容。

值得注意的是,打开一个文件的方式有两种,一种是字节流的方式,另一种则是已经编码的字符方式,根据你的具体需要而定。

12345678910#!/usr/bin/python

# -*- coding: UTF-8 -*-

file = open('tttt.py', 'r+')

print(file.read())

file.write('dlc')

print(file.read())

file.close()

write() 方法可将任何字符串写入一个打开的文件。该方法不会在字符串的结尾添加换行符 \n.

close() 方法刷新缓冲区里任何还没写入的信息,并关闭该文件。

除了这个内置函数外,Python 还有很多常用的内置函数:https://docs.python.org/zh-cn/3/library/functions.html#open

abdfb72df03ff3a409d2871729c2d74d.png

NumPy 模块方法

NumPy 是使用 Python 进行科学计算的基础软件包。除其他外,它包括:功能强大的N维数组对象。

精密广播功能函数。

集成 C/C+ 和 Fortran 代码的工具。

强大的线性代数、傅立叶变换和随机数功能。

我们今天只关心它的一个特别的功能就是 I/O 操作,NumPy 可以读写磁盘上的文本数据或二进制数据。它有两个相关函数 load() 和 save().

123456789import numpy as np

a = np.array([1,2,3,4,5])

# 保存到 outfile.npy 文件上

np.save('outfile.npy',a)

# 保存到 outfile2.npy 文件上,如果文件路径末尾没有扩展名 .npy,该扩展名会被自动加上

np.save('outfile2',a)

NumPy还有两个常用的字符读写方法 loadtxt() 和 savetxt():

12345678import numpy as np

a=np.arange(0,10,0.5).reshape(4,-1)

#改为保存为整数,以逗号分隔

np.savetxt("a.txt",a,fmt="%d",delimiter=",")

#load时也要指定为逗号分隔

b = np.loadtxt("a.txt",delimiter=",")

print('b=\n',b)

os 模块方法

Python 的 os 模块封装了常见的文件和目录操作,官方文档:https://docs.python.org/3/library/os.path.html

常用的方法如下:方法说明os.mkdir创建目录

os.rmdir删除目录

os.rename重命名

os.remove删除文件

os.getcwd获取当前工作路径

os.walk遍历目录

os.path.join连接目录与文件名

os.path.split分割文件名与目录

os.path.abspath获取绝对路径

os.path.dirname获取路径

os.path.basename获取文件名或文件夹名

os.path.splitext分离文件名与扩展名

os.path.isfile判断给出的路径是否是一个文件

os.path.isdir判断给出的路径是否是一个目录

咱们着重看一下 os.write(fd, str) 方法和 os.read(fd,n):os.read(fd,n)

fd − This is the file descriptor of the file(文件描述符).

n − These are n bytes from file descriptor fd(读几个字节).

12345678910#!/usr/bin/python

# -*- coding: UTF-8 -*-

import os

file = os.open('tttt.py', os.O_RDWR | os.O_APPEND )

print(os.read(file, 10))

os.write(file, str.encode('dlc'))

print(os.read(file, 10))

os.close(file)

从这里我们其实可以看出,Python 内置的 read() 和 write() 方法更适合具体的文件读写,而 os 模块 更适合文件和目录的操作,各有侧重。

csv 模块方法

CSV 是逗号分割值的文件格式,其文件以纯文本的形式存储表格数据。 CSV 文件的每一行都用换行符分割,列与列之间用逗号分割,它可以用 Excel 打开。

例如我新建了一个 Excel 内容如下:

b7d41764ad685f9f28f5b6c60ad702c2.png

导出 csv 内容如下:

3b05be67271db038e51cfa42b470817f.png

使用 csv 模块读出数据:

123456789#!/usr/bin/python

# -*- coding: UTF-8 -*-

import csv

with open('tttt.csv', 'r') as myFile:

lines = csv.reader(myFile)

for line in lines:

print(line)

80a1d6ab0ec0abfe53f1b63bfe89759b.png

这里使用到了 with 语句,详细可参考:https://www.ibm.com/developerworks/cn/opensource/os-cn-pythonwith/index.html

数据库存储

Python 标准数据库接口为 Python DB-API,Python DB-API 为开发人员提供了数据库应用编程接口。Python 数据库接口支持非常多的数据库,你可以选择适合你项目的数据库:GadFly

mSQL

MySQL

PostgreSQL

Microsoft SQL Server 2000

Informix

Interbase

Oracle

Sybase

操作 MySQL

MySQLdb 是 python 操作 mysql 数据库的一个库。mysql 的几乎所有的操作都可以实现。

安装方法:

1pip install MySQL-python

mysqlclient 是 MySQLdb 的 fork 版,增加了对 python 3.x 的支持和其它优化,推荐替代 MySQLdb.

首先需要安装 mysqlclient 库,连接 Python 和 MySQL. 本文出自水寒的博客:https://dp2px.com

1pip install mysqlclient

安装完成后我们可以尝试使用 Python 操作 MySQL,首先我们通过 Navicat 创建一个数据库:

8c451b48cb93a488f8cf1de8d9eb4651.png

官方文档地址:https://mysqlclient.readthedocs.io/

创建一个表,插入一条数据:

1234567891011121314#!/usr/bin/python

# -*- coding: UTF-8 -*-

import MySQLdb

conn = MySQLdb.connect(host='192.168.1.37', user='root', passwd='123456', db='lixiaoqiang')

cur = conn.cursor()

cur.execute("create table student(id int, name varchar(20), age varchar(10))")

cur.execute("insert into student values('1', 'XiaoMing', '18')")

cur.close()

conn.commit()

conn.close()

7462520e176c1f99cf1584207a9825dc.png

如果我们要更新这条数据,可以使用如下 SQL:

1delete from student where id = 1;

假如我们要修改则使用如下 SQL:

1update student set age = '19' where id = 1;

当然了,也可以使用占位符来插入数据:

123456789import MySQLdb

conn = MySQLdb.connect(host='192.168.1.37', user='root', passwd='123456', db='lixiaoqiang')

cur = conn.cursor()

sql = "insert into student values(%s,%s,%s)"

cur.execute(sql, (2, 'XiaoHong', '20'))

cur.close()

conn.commit()

conn.close()

76ec1ae2130891a66700475177d78c17.png

你也可以使用占位符的方式一次插入多条数据,这个时候需要使用 executemany() 函数,例如:

123456789101112131415161718#!/usr/bin/python

# -*- coding: UTF-8 -*-

import MySQLdb

conn = MySQLdb.connect(host='192.168.1.37', user='root', passwd='123456', db='lixiaoqiang')

cur = conn.cursor()

sql = "insert into student values(%s,%s,%s)"

cur.executemany(sql, [

(3, 'Tom', '21'),

(4, 'Jack', '23'),

(5, 'Heiwa', '24'),

(6, 'xiaoM', '26'),

(7, 'Yahei', '28'),

])

cur.close()

conn.commit()

conn.close()

374499e42a8cccd5d77e52b0514ca2f2.png

接下来我们来看看如何查询表中的数据,查询数据需要使用 SQL 语句加 fetchone() 和 fetchmany() 函数:

123456789101112131415#!/usr/bin/python

# -*- coding: UTF-8 -*-

import MySQLdb

conn = MySQLdb.connect(host='192.168.1.37', user='root', passwd='123456', db='lixiaoqiang')

cur = conn.cursor()

cur.execute("select * from student")

print(cur.fetchone())

print(cur.fetchone())

print(cur.fetchone())

print(cur.fetchone())

cur.close()

conn.commit()

conn.close()

49a424f3427644693016f5d3f615b5aa.png

fetchone() 方法可以帮助我们获得表中的数据,可是每次执行 cur.fetchone() 获得的数据都不一样,换句话说我没执行一次,游标会从表中的第一条数据移动到下一条数据的位置,所以,我再次执行的时候得到的是第二条数据。

scroll(0,'absolute') 方法可以将游标定位到表中的第一条数据。还是没解决我们想要的结果,如何获得表中的多条数据并打印出来呢?

1234567891011121314#!/usr/bin/python

# -*- coding: UTF-8 -*-

import MySQLdb

conn = MySQLdb.connect(host='192.168.1.37', user='root', passwd='123456', db='lixiaoqiang')

cur = conn.cursor()

allexe = cur.execute("select * from student")

info = cur.fetchmany(allexe)

for item in info:

print(item)

cur.close()

conn.commit()

conn.close()

2fa19cfa0e62ee135ded4254fd2bb4e2.png

操作 MongoDB

很多时候我们爬取的数据都是 JSON 格式的,这个时候使用非关系型数据库 MongeDB 就会方便很多,它是非常流行的 NoSQL 数据库之一。

社区版是免费的,下载地址:https://www.mongodb.com/download-center

f5a089bf0e331bf1ddd8c56093b855c9.png

注册后去邮箱验证,然后登录去下载,有两个安装包,一个是服务另一个是仪表盘。

76c9feea48354eafa93a9e94ff68dcd2.png

先安装好下面那个服务程序后会自动启动 mongodb 服务,此时你可以选择安装图形化仪表盘也可以不安装,仪表盘如下:

96dc4c22f3237cdcd176a9df3d8a1940.png

创建一个 Database 和一个表 student 如下:

fea1871df771beb8b1b7e0be8b288f97.png

紧接着我们使用 pymongo 来查询这条数据:

123456789101112#!/usr/bin/python

# -*- coding: UTF-8 -*-

from pymongo import MongoClient

client = MongoClient('localhost', 27017)

db = client.testpython

collection = db.student

result = collection.find_one({'gender': 'man'})

print(result)

然后我们插入一条数据,再查询出所有数据:

123456789101112131415#!/usr/bin/python

# -*- coding: UTF-8 -*-

from pymongo import MongoClient

client = MongoClient('localhost', 27017)

db = client.testpython

collection = db.student

xiaogang = {"name": "xiaogang", "age": 20, "gender": "woman"}

collection.insert_one(xiaogang)

result = collection.find()

for item in result:

print(item)

bef4988efdbf43e5339c25296856f9fd.png

还记得我们上一篇 《Python 的网络请求 Requests 模块使用》 的爬取豆瓣Top250 的案例吗,我们接下来尝试将爬取的数据存入 MongoDB 数据库:

12345678910111213141516171819202122232425262728293031323334353637383940414243#!/usr/bin/python

# -*- coding: UTF-8 -*-

import requests

from bs4 import BeautifulSoup

from pymongo import MongoClient

headers = {

'user-agent' : 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36

(KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36',

'Host': 'movie.douban.com'

}

def getMovieData():

movies = []

for i in range(0, 10):

link = 'https://movie.douban.com/top250?start=' + str(i * 25) + '&filter='

r = requests.get(link, headers=headers, timeout=3)

print("响应状态码:", r.status_code)

soup = BeautifulSoup(r.text, "lxml")

div_list = soup.find_all('div', class_='item')

for each in div_list:

movieimg = each.find('div', class_='pic').a.img['src'].strip()

moviename = each.find('div', class_='hd').a.span.text.strip()

moviestar = each.find('span', class_='rating_num').text.strip()

movie = {'name': moviename, 'img': movieimg, 'star': moviestar}

movies.append(movie)

return movies

def insertDB(movies):

client = MongoClient('localhost', 27017)

db = client.testpython

collection = db.movie

collection.insert_many(movies)

movies = getMovieData()

print("爬取成功,开始写入数据库")

insertDB(movies)

print("写入数据库成功")

f14518a64e100073798e10849eef42e7.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/296129.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c#10中的namespace

A、namespace是c#用来管理类型隔离的关键字,在不同的namespace下可以相同名称的类型,并且namespace是可以嵌套的。Demo01.csnamespace NameSpaceDemo {internal class Demo01Class{ }namespace NSDemo01{internal class Demo01Class{}}namespace NSDemo…

岛国小姐姐来例假时,男朋友背着她偷偷查手机......

1 大猪蹄子们都好好学学▼2 人形扫地机???▼3 妈,看下你儿子大学四年积攒的宝藏▼4 你以为养老院很无聊?▼5 这个事是全世界统一的吗?▼6 爸爸:今天做个温柔的人吧▼7 那些隐藏在民间的车…

mysql-普通查询(General Query)慢查询(Slow Query)相关日志配置

2019独角兽企业重金招聘Python工程师标准>>> 配置 配置方法一: 服务启动时 # vi /etc/my.cnf ... log-outputTABLE,FILE general-log1 slow-query-log1# systemctl restart mysqldlog-output默认是FILE,还有个值是NONE,就不输出日志了.我这里演示的是表和日志文件都…

他让全世界凶手睡不着觉,现实版福尔摩斯,退休了4次又被拽回来工作,无敌实在是太寂寞了~...

全世界只有3.14 % 的人关注了爆炸吧知识今天要说一位最近在中国圈粉无数萌萌哒老爷爷他是《挑战不可能》里的李博士也是世界上最牛逼的刑侦鉴识专家DrHenryLee李昌钰人称现实版福尔摩斯他是全球身价最高的鉴识专家之一据说工作酬劳是10000美元/时如果哪个案子他都破不了那这个c…

集成Dapr的 Azure 容器应用

微软在 Ignite 2021 大会上发布了预览版的Azure Container Apps,这是一个完全托管的无服务器容器运行时,用于大规模构建和运行现代应用程序。从2021 年 11 月 2 日起,Azure 容器应用程序可在公共预览中使用。虽在服务到达 GA 之前&#xff0c…

浅谈SQL注入风险 - 一个Login拿下Server(转)

前两天,带着学生们学习了简单的ASP.NET MVC,通过ADO.NET方式连接数据库,实现增删改查。 可能有一部分学生提前预习过,在我写登录SQL的时候,他们鄙视我说:“老师你这SQL有注入,随便都能登录了。不…

炸了!中国学者首次被Science撤稿,与之前首次被Nature撤稿的教授来自同一所大学……...

全世界只有3.14 % 的人关注了爆炸吧知识两次撤稿并非学术造假?国庆假期结束的第一天,Science杂志将中国地质大学宋怀兵副教授两个月前发表的文章进行了撤稿处理。这也是新中国建国以来,首次被Science撤稿的论文。其实早在8月,Scie…

如何编写干净流畅的Web API测试

前言当我们为Web API编写测试用例时&#xff0c;代码基本是这样的&#xff1a;public class UnitTest1 {private readonly TestServer _server;private readonly HttpClient _client;public UnitTest1(){// Arrange_server new TestServer(new WebHostBuilder().UseStartup<…

SFB2015 多SIP域

SFB2015 多SIP域最近公司有打算要安装最新的SFB2015作为一个SFB小白 在通读了官方安装文章之后竟然磕磕绊绊的安装成功&#xff0c;客户端登录也是成功的&#xff0c;下面就有一个十分蛋疼的问题 公司内外网域名不一致虽然在进行拓扑准备的时候进行了多SIP域的准备&#xff0c;…

中国25个最“吓人”地名,看完都被吓笑了!

全世界只有3.14 % 的人关注了爆炸吧知识转自&#xff1a;中学地理课中国人起名字&#xff0c;是很有讲究的。不管是起人名&#xff0c;还是起地名&#xff0c;和作诗差不多&#xff0c;都是在营造一个意境。就拿北京来说吧&#xff0c;比如颐和园&#xff0c;听着端庄&#xff…

C# 显式接口成员实现

如果类实现两个接口&#xff0c;并且这两个接口包含具有相同签名的成员&#xff0c;那么在类中实现该成员将导致两个接口都使用该成员作为它们的实现。然而&#xff0c;如果两个接口成员实现不同的功能&#xff0c;则可能会导致其中一个接口的实现不正确或两个接口的实现都不正…

没有数学天赋是一种什么体验?

全世界只有3.14 % 的人关注了爆炸吧知识虽然我不懂但我热爱数学♪没有数学天赋是一种什么体验&#xff1f;1 看不懂懵逼矩阵2 小学数学不及格&#xff0c;找了个纹身店&#xff0c;问老板纹个九九乘法口诀多少钱。老板说了一个价钱&#xff0c;后来因算不出要存多少天早餐钱而作…

20151026c#2

变量是内存里存储的&#xff0c;运行在cpu里的。 数据类型 值类型&#xff1a;所有的数值类型都是值类型&#xff08;short int long float double、bool)、枚举、结构 引用类型&#xff1a;对象、字符串、object、数组 区别&#xff1a; 1、值类型 class Program{static void …

一个常见的物理现象,直今还是未解之谜!

全世界只有3.14 % 的人关注了爆炸吧知识在我们的日常生活中存在着很多有趣的物理现象&#xff0c; 科学家对这些现象进行深入研究后&#xff0c;可以通过这些现象延伸&#xff0c;从而在前沿科技发展上得到很大的帮助&#xff0c;甚至去解决宇宙中出现的难题。但是在日常生活中…

SegmentFault 创始人祁宁对话 C# 之父 Anders Hejlsberg

导读 上周&#xff0c;C#、Delphi 之父 Anders Hejlsberg 亲临帝都&#xff0c;就 TypeScript 做了一场技术分享&#xff0c;并与众多开发者就此进行了技术探讨。Anders Hejlsberg 加入微软的 19 年里&#xff0c;一直致力于 C# 和 .NET 的研发工作。同时&#xff0c;作为 Type…

JS:1.3,函数(function)

ylbtech-JS&#xff1a;函数-导航函数定义返回函数调用一个函数调用一个函数(带参数)返回值的函数调用外部的js文件JS&#xff1a;3.1&#xff0c;函数(function)-定义 返回顶部1&#xff0c;定义函数语法 通过定义函数名称&#xff0c;参数和代码语句来创建函数。function 函数…

美女,你这是把腰带当裙子了?

1 你这是把腰带当裙子了&#xff1f;&#xff08;良心建议&#xff1a;穿这裙子一定要专心...&#xff09;▼2 真正充满味道的食堂&#xff01;▼3 &#xff1f;&#xff1f;&#xff1f;这又是一只有故事的猫▼4 女生的肚子可以多神奇&#xff1f;&#xff08;dy&#xff…

UITableView定制accessoryView出现的连带问题

为了美化UI,想实现如下图的效果:点击高亮 出发点是好的。没想到&#xff0c;出现了下图的连带问题:选择一行的时候&#xff0c;竟然连带的出现了高亮效果 这个如何是好&#xff1f;经过网络搜索&#xff0c;发现我不是第一个遇到这样的问题&#xff1a;custom-accessory-button…

Asp.NET Core 如何使用ElasticSearch和Kibana创建仪表板

图片在我以前的文章&#xff08;这里是第一[1]篇和第二篇[2]&#xff09;中&#xff0c;我展示了ElasticSearch作为电子商务中的全文搜索引擎的使用&#xff0c;一些高级配置的设置和使用以及products包含所有内容的索引的创建保存的产品。出于演示目的&#xff0c;我们使用Bog…

男女共厕,考验男生心理素质的时候到了......

1 假期里你都干了啥&#xff1f;▼2 有猫饼▼3 奥特曼&#xff1a;我不会错过&#xff01;▼4 自绝式单身▼5 我信了▼6 意外的惊喜▼7 画面太美我不敢看▼你点的每个赞&#xff0c;我都认真当成了喜欢