引言

想学爬虫还是 python 专业啊,之前一直在用 java, 现在决定尝尝鲜,使用 python及爬虫框架来完成网络数据采集。

编程语言之间都是相通的,比如都需要模块化,引入其他文件来实现功能,使用列表等容器来处理数据,都要使用 jsonxml 来解析和传输数据。

你会发现通过 类比 的方式,带着问题去学习,你会发现走的很快

而且我认为代码示例的作用是 异常强大的, 我会尽量使用代码示例的方式来展示,以满足同学快速学习的需要,也备后续查询。

下面就是在 使用 python 过程中的问题总结,okay,让我们一起来历险吧~

String 有哪些有用的方法?

不管是哪种语言,用的最多的类型估计都是 string (字符串),要想快速入门 python, 掌握 string 也是必须的。

在 java 中使用最多的 string 功能,我也会带着同样的疑问来了解 python 该使用什么方法实现。如果这里没有你要找的方法,可以到 python string 官方地址完整方法去查询

如何拼接字符串?

  • 使用 + 号来拼接,要注意的是,当有数字的时候一定要转化为字符串格式 str(value) 才能够相加,不然会报错。
  • 使用%进行拼接,和占位符的概念比较类似,这里举个栗子
hour = 9
minutes = 45
print('it\'s %d:%d minutes!' %(hour, minutes))

如何分隔字符串?

# 对字符串分割
split_str = 'a-b-c-d'
print(split_str.split('-'))

如何获取字符串长度

# 获取字符串的长度
print(len('banana'))

如何将 list 拼接成字符串?

# 以 - 做间隔,拼接字符串
join_str_list = ['a', 'b', 'c', 'd']
print('-'.join(join_str_list)) # 这里就是用 - 拼接后的值

如何替换字符串?

 str.replace(old, new[, count])

count 表示替换的次数,如果没有指定,则只会替换第一个遇到的

如何去除字符串中的空格?

去除字符串中空格分为 3 种

  • 去除两端的空格
  • 去除左边的空格
  • 去除右边的空格
# 去除字符串中的空格
strToStrip = ' abc '
print(strToStrip.strip()) # 去除两端空格
print(strToStrip.lstrip()) # 去除左边空格
print(strToStrip.rstrip()) # 去除右边空格

如何子字符串是否包含在父字符串中?

child_str = 'abc'
print('abcd'.find(child_str)) # 如果存在就返回首字母下标,不存在返回 -1

python 有哪些有用的容器?

学过 java 的都知道,在 java 中使用最多的容器有 List, Map, Set, Array,这些容器可以让我们方便的存储并操作数据,那么 python 中又有哪些类似的容器可供我们使用呢?

列表 list

python 中也有列表,功能包含了 java 列表,而且更牛的是它可以 包含不同类型的元素

['a', 10, 1.5] # 这就是一个列表,只需要方括号包起来即可

如何遍历一个列表

有两种方式可实现

  • for 循环的方式,这当然是最常见的
list = ['a', 1, 1.4]

for item in list:
print(item)

在只需要读取列表的元素本身时这种方式当然很优雅。但如果需要获取元素的下标,就力不从心了,这就需要下面的方式。

  • 使用内置函数 range 和 len, 操作元素下表
list = ['a', 1, 1.4]
for i in range(len(list)):
list[i] = list[i] * 2
print(list[i])

如何对列表切片?

pyton 中专门有切片操作符 :, 想切多厚切多厚,这可比 java 要方便不少。

通过例子来感受下吧。

alpha_list = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
print(alpha_list[1:3]) # ['b', 'c']
print(alpha_list[:4]) # ['a', 'b', 'c', 'd']
print(alpha_list[2:]) # ['c', 'd', 'e', 'f', 'g']
print(alpha_list[:]) # ['a', 'b', 'c', 'd', 'e', 'f', 'g']

如何给列表添加元素?

有四种方式

  • 在列表尾部添加元素 append(value)
  • 将一个列表中的每个元素分别添加到另一个列表上 extend(list)
  • 将一个元素插入到列表的指定位置 insert(index, value)
  • + 号,将两个 list 直接相加, 会返回一个新的 list 对象

码字太多了,自己都晕了,直接上代码。

list1 = ['a', 'b', 'c', 'd']
list1.append('e')
print(list1) # ['a', 'b', 'c', 'd', 'e'] list2_1 = ['a', 'b', 'c', 'd']
list2_2 = ['e', 'f', 'g']
list2_1.extend(list2_2)
print(list2_1) # ['a', 'b', 'c', 'd', 'e', 'f', 'g'] list3 = ['a', 'c', 'd']
list3.insert(1, 'b') # ['a', 'b', 'c', 'd']
print(list3) # 内存多余消耗,不推荐
list4_1 = ['a', 'b']
list4_2 = ['c', 'd']
print(list4_1 + list4_2) # ['a', 'b', 'c', 'd']

删掉元素

也有几种方法可实现

  1. 修改列表,弹出被删除的值 pop(index)
  2. 知道要删除的元素时 remove(value)
  3. 不需要使用删除的值时 del(index)
  4. 删除多个值 del(index_begin, index_end)

上代码

remove_list_1 = ['a', 'b', 'c']
print(remove_list_1.pop(0))
print(remove_list_1)# ['b', 'c'] remove_list_2 = ['a', 'b', 'c']
del remove_list_2[1]
print(remove_list_2)# ['a', 'c'] remove_list_3 = ['a', 'b', 'c']
remove_list_3.remove('b')
print(remove_list_3) # ['a', 'c'] remove_list_4 = ['a', 'b', 'c']
del remove_list_4[1:2]
print(remove_list_4)# ['a', 'c']

字典 dict

dict 和 java 中 Map 非常类似,也是由 keyvalue 组成的,也是

使用 散列表 的算法存储, 用过 java 的同学就直接把它当做 Java HashMap 来用就可以啦。另外,在语法上要比 java 也要简洁不少。

创建 dict 添加元素

a_dict = dict() # 这样就创建了一个空字典
a_dict['one'] = 1 # 塞进去一个元素 not_empty_dict = {'one': 1, 'two': 2, 'three': 3} # 这是一个包含数据的字典

遍历 dict

使用 for 循环遍历所有字典,可以遍历字典中的 key,这样的遍历是没有特定顺序的,如果想按照顺序遍历需要使用内置函数 sorted

d = {'b': 2, 'a': 1, 'c': 3}

for item_key in d:
print(item_key, d[item_key]) for item_key in sorted(d):
print(item_key, d[item_key])

那我如果想要遍历 dict 中的 values 呢?

还真有一个方法叫 values(), 它会返回一个值集合,并可以应用 in 操作符遍历

d = {'b': 2, 'a': 1, 'c': 3}

for value in d.values():
print(value) for sorted_value in sorted(d.values()):
print(sorted_value)

元组

什么是元组? java 中可没有听过内置元组这样的数据结构。

在前面已经讲了列表,知道一个列表可以存储多个数据结构。元组和列表很像,但要记住它们间的一个重要区别: 元组是不可变的

如何创建元组?

  1. 把各个类型的元素用逗号分隔,就可以得到一个元组,为了好看,常常用括号再围起来
  2. 使用内置函数 tuple() 也可以创建元组

注意,由于元组是不可变的,无法修改它的元素。但我们可以使用将多个元组结合成一个新的元组。(元组也支持 +

tuple_a = 1, 2, 3, 4, 5

tuple_b = (1, 2, 3, 4, 5)

# tuple 内置函数的参数必须是一个序列
tupe_c = tuple('12345') # 字符串
tuple_e = tuple([1, 2, 3, 4, 5]) # 列表
tuple_f = tuple((1,2,3,4,5)) # 元组 tuple_d = tuple_a + tuple_b
print(tuple_d)

元组有什么用?

既然 python 中有这么个数据结构,自然就有它的用武之地。还别说,它的用途还真不少。

  • 交换变量对多个变量赋值 更方便,优雅了
a = 5
b = 4
a,b = b,a
# 等式左边是一个变量的元组
# 等式右边是表达式的元组,可以是(字符串,列表,元组都行) c,d = (1,2), [1,2,3]
print(c)
print(d)
  • 可以在函数中返回多个值,将它们装到元组里就行
def min_max(list):
return min(list), max(list) num_list = [3, 1, 5, 2]
print(min_max(num_list))

其他

上面讲述的都是一些大的主题,除了这些,还有一些相对小些的。

虽然小,但也很重要。这些小且重要的部分都在这个部分存放吧。

全局变量是如何处理的?

我们知道 java 中由于变量类型的存在,可以在一个 class 内声明全局变量,从而在 class 的各个方法中读取和赋值。

而这点在 python 中却是行不通的,因为 python 中没有变量类型, 如果在文件中声明一个全局变量,再在函数内对这个变量赋值,会直接导致错误产生。这是因为在函数内又重新创建了一个局部变量。读取全局变量也有这个问题。

那该怎么办呢?嗯~o( ̄▽ ̄)o global 关键字就要登场了。

在函数内部,使用全局变量前,先用 global 关键字声明下这个变量,表示这个变量是全局变量,后面再使用就 okay啦。

上栗子...

g_variable = 3

def test_g_variable():
global g_variable
print(g_variable) # 3
g_variable = 2
print(g_variable) # 2 test_g_variable()

结语

上面并没有把 python 讲完,还有 类和对象,文件JSON处理, 网络 等重要主题,这些会在下篇文章中涉及,敬请期待。

python 历险记(一)— python 的String,集合(List,元组,Dict)的更多相关文章

  1. Python把json格式的string对象转变成dict对象操作、Python3不能使用urllib2、urllib.parse.urlencode(params).encode(encoding='UTF8')

    son格式的string对象转变成dict对象操作 content=eval(content)#json字典转化 Python3不能使用urllib2 直接使用urllib.request替换urll ...

  2. Python数据类型的内置函数之tuple(元组),dict(字典),set(集合)

    Python数据类型内置函数 - str(字符串) - list(列表) - tuple(元组) - dict(字典) - set(收集) tuple(元组)的操作 - (count)统计元组中元素出 ...

  3. python 数据类型: 字符串String / 列表List / 元组Tuple / 集合Set / 字典Dictionary

    #python中标准数据类型 字符串String 列表List 元组Tuple 集合Set 字典Dictionary 铭记:变量无类型,对象有类型 #单个变量赋值 countn00 = '; #整数 ...

  4. 【转】python 历险记(四)— python 中常用的 json 操作

    [转]python 历险记(四)— python 中常用的 json 操作 目录 引言 基础知识 什么是 JSON? JSON 的语法 JSON 对象有哪些特点? JSON 数组有哪些特点? 什么是编 ...

  5. python 历险记(四)— python 中常用的 json 操作

    目录 引言 基础知识 什么是 JSON? JSON 的语法 JSON 对象有哪些特点? JSON 数组有哪些特点? 什么是编码和解码? 常用的 json 操作有哪些? json 操作需要什么库? 如何 ...

  6. python 历险记(三)— python 的常用文件操作

    目录 前言 文件 什么是文件? 如何在 python 中打开文件? python 文件对象有哪些属性? 如何读文件? read() readline() 如何写文件? 如何操作文件和目录? 强大的 o ...

  7. python 历险记(六)— python 对正则表达式的使用(上篇)

    目录 引言 什么是正则表达式? 正则表达式有什么用? 正则表达式的语法及使用实例 正则表达式语法有哪些? 这些正则到底该怎么用? 小结 参考文档 系列文章列表 引言 刚接触正则表达式,我也曾被它们天书 ...

  8. python 历险记(五)— python 中的模块

    目录 前言 基础 模块化程序设计 模块化有哪些好处? 什么是 python 中的模块? 引入模块有几种方式? 模块的查找顺序 模块中包含执行语句的情况 用 dir() 函数来窥探模块 python 的 ...

  9. python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。

    本次python爬虫百步百科,里面详细分析了爬虫的步骤,对每一步代码都有详细的注释说明,可通过本案例掌握python爬虫的特点: 1.爬虫调度入口(crawler_main.py) # coding: ...

  10. Python 标准库笔记(1) — String模块

    原文出处: j_hao104 String模块包含大量实用常量和类,以及一些过时的遗留功能,并还可用作字符串操作. 1. 常用方法 常用方法 描述 str.capitalize() 把字符串的首字母大 ...

随机推荐

  1. Java 的类加载机制

    Java 的类加载机制 来源 https://www.cnblogs.com/xiaoxi/p/6959615.html 一.什么是类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内 ...

  2. MT【46】不动点,稳定点几何直观

    评:不动点概念在数列的一类题中也是非常有用的.

  3. pdo连接的时候设置字符编码是这样的

    $pdo = new \PDO(..,..,..) $pdo->query('SET NAMES utf8mb4'); $pdo->exex('sql....');

  4. [hgoi#2019/2/17t1]million

    题目描述 面对格鲁的入侵,小黄人们要组建一支队伍,来抵御进攻,现在有编号为1 至n 的小黄人,任命编号为n 的队长,由其挑选队员,当然编号不是随便编的,每一个编号里都包含一个小黄人的个人信息,现在队长 ...

  5. MATLAB:图像的移动(move函数)

    图像移动涉及到move函数,实现过程如下: close all; %关闭当前所有图形窗口,清空工作空间变量,清除工作空间所有变量 clear all; clc; I=imread('lenna.bmp ...

  6. nginx 反向代理案例

    server{ listen ssl; server_name a.xxxxx.com; root /home/wwwroot/default/asqumo; ssl_protocols TLSv1. ...

  7. P4315 月下“毛景树”

    P4315 月下"毛景树" 题目描述 毛毛虫经过及时的变形,最终逃过的一劫,离开了菜妈的菜园. 毛毛虫经过千山万水,历尽千辛万苦,最后来到了小小的绍兴一中的校园里. 爬啊爬~爬啊爬 ...

  8. my soft

    s 版本 61.0.3163.100(正式版本) (64 位) chrome://settings/content/flash 允许网站运行 Flash,多开闭几次,即可.     soft / ul ...

  9. MYSQL增加tmp_table_size 的操作

    最近有张表经常损坏,修复后还是会出现损坏. dba分析有可能是临时表空间太小导致的.以下是设置临时表空间大小的操作. 设置 tmp_table_size的大小 mysql> set global ...

  10. GYM 101173 K.Key Knocking(构造)

    原题链接 参考自 问题描述:一个长度为3*n的01串,每次可以翻转连续的两个字符,要求至多翻转n次使得这个3*n的串至少有2*n个连续的段且相邻两端不一样(就是连续的0算一段,然后连续的1,…) 解法 ...