Code前端首页关于Code前端联系我们

计算机如何存储数据? Python编程:数据爬虫(第二部分)

terry 2年前 (2023-09-25) 阅读数 51 #后端开发

计算机如何存储数据?Python编程:数据爬虫(中篇)

计算机如何存储数据

本文主要介绍数据存储的原理以及循环的原理和使用。大家都应该了解python中的各种循环方法并熟练使用它们。

6。数据存储

数据存储需要两件事。

(1) 可以救国的东西;

(2) 如何读取状态。

我们的存储机制必须有不止一种状态,但两种状态就足够了。我们可以将其视为通过某种电源连接到灯泡的电灯开关。当您打开电灯开关时,灯泡会亮起:

计算机如何存储数据?Python编程:数据爬虫(中篇)

翻转开关以更改灯泡的状态。

灯泡有两种不同的状态:打开或关闭。

这是我们需要存储的唯一数据位。位是信息的基本单位。一位足以选择两个选项(例如,打开或关闭灯泡)。

如果您有足够的灯泡,您可以存储许多位,足以存储任意数量的数字数据。

除了能够改变某些状态之外,读取内存还需要能够感知状态的东西。

对于灯泡来说,这可能是一个眼睛或光传感器,可以查看灯泡是否打开或关闭。这与计算机中的数据存储非常相似,但计算机存储单个位所使用的能源和空间比灯泡少得多。

计算机上最快的内存就像一个开关。直接存储在处理器内存(即所谓的寄存器)中的数据被存储为开关,因此可以非常快速地更改和读出它们的状态。

然而,寄存器就像灯泡一样,当你关闭电源时它们就会失去状态。这意味着当计算机关闭时,存储在寄存器中的所有数据都会丢失。

计算机存储数据的另一种方式类似于存储桶。

我们可以使用满的容器来表示 1,使用空的容器来表示 0。要检查桶的状况,我们可以称一下桶的重量,或者查看桶的重量来知道桶是满的还是空的。

计算机如何存储数据?Python编程:数据爬虫(中篇)

水桶和灯泡的区别在于水桶漏水,水桶里的水蒸发了。

如果您想使用存储来存储数据,它不会永远持续下去。

最终,当所有的水都蒸发后,你将无法区分 0 和 1 之间的区别。计算机使用数字抽象技术解决这个问题。

桶中可以有无限多个不同数量的水,但每个都映射为 0 或 1 的值。这意味着只要水不落下,即使有些水蒸发也没关系。

在计算机中,桶里装的是电子,而不是水,这些电子被称为电容器。

计算机中这样工作的内存称为DRAM。

7。 DRAM

下面是从计算机中取出的 2GB DRAM

计算机如何存储数据?Python编程:数据爬虫(中篇)

1 GB 约为 10 亿字节。一个字节是8位。

1 GB 实际上是 2^30 字节。这非常接近十亿,但在计算中使用 2 的幂通常更方便。

在 Python 中,求幂运算符由两颗星表示:

<''base''> ** <''power''> â†’ <''base''><''power''>

例如:

print 2 ** 101024

1 KB 为 1024 字节:

print 2 ** 20 # one megabyte1048576
print 2 ** 30 # one gigabyte1073741824
print 2 ** 40 # one terabyte1099511627776

千字节、兆字节、千兆字节和太字节是用于谈论计算机的主要单位记忆。

现在回到 DRAM,它是 2 GB 的内存。由于 1 GB 为 2^30 字节,因此我们可以通过乘以 2(因为有 2 GB)和 8(一个字节中的位数)来计算总位数。

  • 2^30*2*8[?] 170 亿个电灯开关。
  • 1 字节 = 8 位
  • 1 位灯开关(两种状态)

所以可见的 DRAM 就像 170 亿个桶,每个桶可以存储一位。

计算机内有许多不同类型的内存。例如,前面提到的寄存器是直接内置于处理器中的最快的存储器。

不同类型的存储器的特点是检索值所需的时间(称为延迟)、每比特的成本以及在断电时保持状态的时间。

对于 DRAM,延迟约为 12 纳秒(回想一下,一秒有 10 亿纳秒)。 2GB DRAM的价格约为70元。

8。内存层次结构

为了更好地了解不同类型的计算机内存,让我们从每比特成本和延迟方面对它们进行比较。

由于以纳秒为单位测量的时间很难进行比较,因此延迟被转换为恢复存储位所需的时间内光传播的距离。

由于每比特的成本已经很低了,所以我们引入了一个新的货币单位:纳米是十亿分之一元人民币,所以我们知道比特的成本非常低!

计算机如何存储数据?Python编程:数据爬虫(中篇)

9。硬盘

另一种计算机内存是硬盘。

硬盘内部有多个旋转盘。磁盘以磁性方式存储数据,并具有读取头,可以从磁盘读取数据并从磁盘写入新数据。

与 DRAM 相比,这是一种非常慢的数据存储方法,因为它涉及旋转物理磁盘和移动读取头,但它可以以比 DRAM 低得多的成本存储数据。

在硬盘上存储数据的另一个优点是它持久耐用。即使断电数据也不会丢失。

计算机如何存储数据?Python编程:数据爬虫(中篇)

我们的DRAM可以存储2GB,这个硬盘可以存储1MB,是内存的500倍。一兆字节接近一万亿字节。

  • 8*2/^40 位 [? ] 8. 8万亿位

此内存足以存储约100小时的高质量视频。

硬盘延迟远高于 DRAM。

这是因为硬盘驱动器移动物理事物。

使用磁盘操作,因此您必须等待磁盘旋转并到达读取头。另外,如果光盘位置不正确,您可能必须等待读取头移动。

硬盘的平均延迟约为7毫秒(1毫秒=1/1000秒=100万纳秒)。

该类型硬盘的价格约为150元(人民币),因此每比特的成本远低于DRAM内存的成本。

计算机如何存储数据?Python编程:数据爬虫(中篇) 项目 10. 列表中的项目 由于列表是事物的集合,因此能够通过列表处理每个项目非常有用。我们引入了 while 循环:

while <'''测试表达式'''>: <'''代码块'''>

如果测试表达式为 true,则执行 。在模块结束时,通过重新计算测试表达式来恢复执行,并且模块执行将继续,直到测试表达式的计算结果为 true。

11。关于循环

Python 有一种更方便的方法来循环列表的元素:for 循环。语法如下:

for <''名字''> in <''班级''>:        <''代码块''>

循环依次检查班级中的每个学生,将学生分配给,并根据执行操作,例如评分、提交作业记录等。

可以使用for循环定义存储过程,就像使用while循环一样。

print_all_elements 需要更少的代码:

def print_all_elements(p): for e in p: print e

让我们看看当您将此 for 循环应用于列表时会发生什么:

mylist = [1, 2, 3]print_all_elements(mylist)

当您将 mylist 传递给 print_all_elements 时,变量 p 是一个包含三个元素的列表: 1 、 2 和 3 .

循环执行时,变量e将被赋值给列表的第一个元素,循环体将打印第一个元素。

执行循环时,变量 e 被赋值给列表的第一个元素,循环体写出第一个元素。

所以在第一次迭代中,e 的值为 1。模块执行并打印 1。

由于列表中还有更多元素,因此继续执行并将 2 赋给 e。模块再次被执行,但这次打印了 2。

第三次迭代继续并输出 3。

列表中没有更多的项目,因此 for 循环结束并继续执行下一条语句(在这种情况下,没有更多的语句,因此执行结束)。

12。索引-索引方法

还有许多其他方法来定义find_element。有一个我们还没有实现的内置列表操作可以让编写find_element变得更容易,它就是index方法:

<''list''>.index(<''value''>) â†’ <''position''> or error

index方法通过传递一个值来调用一个列表,输出是列表中的第一个值地点。

如果列表不包含任何出现的传递值,index 将生成错误(这与第一个单元中使用的字符串查找方法不同,如果未找到目标字符串,则返回 -1)。例如:

p = [0, 1, 2]print p.index(2)2p = [0, 1, 2, 2, 2]print p.index(2)2

即使列表中有很多 2,输出也是 2 出现的第一个位置。 #!精选 python p = [0, 1, 2] print p.index(3) ValueError: (x): x not in list }

由于 find_element 所需的行为是如果未找到输入元素则输出 -1 ,我们不能直接使用index来实现find_element,因为如果没有找到该元素,index会抛出错误。

相反,我们可以使用另一个列表操作来检查该元素是否在列表中的某个位置。

我们已经看到了 for 循环中 in 的使用,但它除了 for 循环头之外还有不同的含义。

<''value''> in <''list''> â†’ <''Boolean''>

如果列表包含具有匹配值的元素,则输出为 true,否则输出为 false。例如:

p = [0, 1, 2]print 3 in pFalseprint 1 in pTrue

同样,您可以使用值not,其含义相反:

<''value''> not in <''list''>

如果该值不在列表中,则not的结果为True,如果在列表中,则结果为False。这两项是等价的:

<''value''> not in <''list''>  not <''value''> in <''list''>

13。 Pop

pop 操作通过删除列表的最后一个元素来改变列表。返回被删除元素的值。

<''list''>.pop() â†’ element

例如:

a = [1, 2, 3]b = a # both a and b refer to the same listx = () # value of x is 3, and a and b now refer to the list [1, 2]

本课重点介绍几个循环。每个人都应该理解它的原理并反复实践。它们广泛应用于以下爬虫中。

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门