参考 B 站 IT 私塾Python 爬虫编程基础 5 天速成(2021 全新合集)Python 入门+数据分析视频

注释

  • 单行注释
1
2
# 我是注释,可以在里写一些功能说明之类的哦
print('hello world')
  • 多行注释
1
2
3
4
5
6
'''
我是多行注释,
可以写很多很多行的功能说明
哈哈哈。。。
'''
print('hello world')

如果直接在程序中用到了中文,比如:print('你好'),如果直接运行输出,程序会出错

解决的办法为:在程序的开头写入#coding=utf-8

注意:在 python 的语法规范中推荐使用# -*- coding:utf-8 -*-


输出

普通输出

print('hello world')

格式化输出

1
2
age = 21
print("我今年%d岁"% age)

在程序中,看到了%这样的操作符,这就是 Python 中格式化输出。

再来一个例子:

1
2
3
age = 21
name = "HarrisWong"
print("我的姓名是%s,年龄是%d"%(name,age))

常用的格式符号

格式符号转换
%c字符
%s通过 str() 字符串转换来格式化
%i有符号十进制整数
%d有符号十进制整数
%u无符号十进制整数
%o八进制整数
%x十六进制整数(小写字母)
%X十六进制整数(大写字母)
%e索引符号(小写'e')
%E索引符号(大写'E')
%f浮点实数
%g%f 和%e 的简写
%G%f 和%E 的简写

换行输出

在输出的时候,如果有\n那么,此时\n后的内容会在另外一行显示

1
2
print("1234567890-------") # 会在一行显示
print("1234567890\n-------") # 一行显示1234567890,另外一行显示-------

输入

先看一个例子:

1
2
password = input("请输入密码:")
print('您输入的密码是:', password)
  • input()的小括号中放入的是,提示信息,可省略

  • input()在从键盘获取了数据以后,会存放到等号左边的变量中

  • input()函数接受的输入必须是表达式


运算符和表达式

算术运算符

算术运算符描述
+加 - 两个对象相加
-减 - 得到负数或是一个数减去另一个数
*乘 - 两个数相乘或是返回一个被重复若干次的字符串
/除 - x 除以 y
%取模 - 返回除法的余数
**幂 - 返回 x 的 y 次幂
//取整除 - 向下取接近除数的整数

比较运算符

比较运算符描述
==等于 - 比较对象是否相等
!=不等于 - 比较两个对象是否不相等
>大于 - 返回 x 是否大于 y
<小于 - 返回 x 是否小于 y。所有比较运算符返回 1 表示真返回 0 表示假。这分别与特殊的变量 True 和 False 等价
>=大于等于 - 返回 x 是否大于等于 y
<=小于等于 - 返回 x 是否小于等于 y

赋值运算符

赋值运算符描述
=简单的赋值运算符
+=加法赋值运算符
-=减法赋值运算符
*=乘法赋值运算符
/=除法赋值运算符
%=取模赋值运算符
**=幂赋值运算符
//=取整除赋值运算符

判断语句和循环语句

条件判断语句

if

1
2
3
age = 30
if age >= 18:
print "我已经成年了"

if-else

1
2
3
4
if True:
print ("True")
else:
print ("False")

如果缩进不一致,会导致运行错误

elif

1
2
3
4
5
6
7
8
9
10
11
score = 98
if score>=90 and score<=100:
print('本次考试,等级为A')
elif score>=80 and score<90:
print('本次考试,等级为B')
elif score>=70 and score<80:
print('本次考试,等级为C')
elif score>=60 and score<70:
print('本次考试,等级为D')
else: #elif可以else一起使用
print('本次考试,等级为E')

循环语句

for

格式:

1
2
for 临时变量 in 列表或者字符串等:
循环满足条件时执行的代码

例子:

1
2
3
4
name = 'hassan'
for x in name:
print(x)
# h a s s a n

while

例子:

1
2
3
4
5
i = 0
while i<5:
print("当前是第%d次执行循环"%(i+1))
print("i=%d"%i)
i+=1

break、continue、pass

  • break 语句可以跳出 forwhile 的循环体
  • continue 语句可以跳出当前循环,直接进行下一轮循环
  • pass 是空语句,一般用做占位语句,不做任何事情

导入 import

在 python 用 import 或者 from import 来导入相应的模块。

将整个模块(somemodule)导入,格式为:import somemodule

从某个模块中导入某个函数,格式为:from somemodule import somefunction

从某个模块中导入多个函数,格式为:from somemodule import firstfunc, secondfunc, thirdfunc

将某个模块中的全部函数导入,格式为: from somemodule import \*

  • 生成随机数
  1. 第一行代码引入库:import random #引入随机库
  2. 生成指定范围的随机数:harris = random.randint(0,2) 随机生成 0、1、2 中的一个数字,赋值给变量 harris

字符串

字符串运算符

前提:a = "Hello", b = "Python"

操作符描述实例
+字符串连接a + b 输出结果: HelloPython
*重复输出字符串a*2 输出结果:HelloHello
[]通过索引获取字符串中字符a[1] 输出结果 e
[ : ]截取字符串中的一部分,遵循左闭右开原则a[1:4] 输出结果 ell
in成员运算符 - 如果字符串中包含给定字符则返回 True'H' in a 输出结果 True
not in成员运算符 - 如果字符串中不包含给定的字符返回 True'M' not in a 输出结果 True

字符串的截取和连接

1
2
3
4
5
6
7
8
9
10
11
12
13
14
str='hassanwong'

print(str) # 输出字符串
print(str[0:-1]) # 输出第一个到倒数第二个的所有字符
print(str[0]) # 输出字符串第一个字符
print(str[2:5]) # 输出从第三个开始到第五个的字符
print(str[2:]) # 输出从第三个开始后的所有字符
print(str * 2) # 输出字符串两次
print(str + '你好') # 连接字符串
print(str[:5]) # 输出第五个字母前的所有字符
print(str[0:7:2]) # [起始:终止:步长]

print('hello\npython') # 使用反斜杠(\)+n转义特殊字符
print(r'hello\npython') # 在字符串前面添加一个 r,表示原始字符串,不会发生转义

字符串的常见操作

函数描述
len(S)返回 S 字符串长度
join(seq)以指定字符串作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串
lower()转换字符串中所有大写字符为小写
upper()转换字符串中的小写字母为大写
lstrip()截掉字符串左边的空格或指定字符
rstrip()删除字符串字符串末尾的空格
max(str)返回字符串 str 中最大的字母
min(str)返回字符串 str 中最小的字母
S.format ()"{} {}".format("hello", "world") # 不设置指定位置,按默认顺序
'hello world'
"{0} {1}".format("hello", "world") # 设置指定位置
'hello world'
"{1} {0} {1}".format("hello", "world") # 设置指定位置
'world hello world'

replace()

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

参数:

  • old -- 将被替换的子字符串。
  • new -- 新字符串,用于替换 old 子字符串。
  • max -- 可选字符串, 替换不超过 max 次

split()

str.split(str="", num=string.count(str)).

参数:

  • str -- 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。
  • num -- 分割次数。默认为 -1, 即分隔所有。

例子:

1
2
3
4
5
6
str = "Line1-abcdef \nLine2-abc \nLine4-abcd";
print str.split( ); # 以空格为分隔符,包含 \n
print str.split(' ', 1 ); # 以空格为分隔符,分隔成两个
#结果:
#['Line1-abcdef', 'Line2-abc', 'Line4-abcd']
#['Line1-abcdef', '\nLine2-abc \nLine4-abcd']

列表 List

循环遍历

1
2
3
namesList = ['hassan','wendy','sharon']
for name in namesList:
print(name)

函数

函数描述
len(list)列表元素个数
max(list)返回列表元素最大值
min(list)返回列表元素最小值
list(tuple)将元组转换为列表

方法

方法描述
list.append(obj)在列表末尾添加obj
list.count(obj)统计 obj 在列表中出现的次数
list.index(obj)查找列表中值为 obj 第一个匹配项的索引位置
list.insert(index, obj)将 obj插入列表下标为 index
list.pop(index)移除下标为 index 的元素,并返回该元素的值
list.remove(obj)移除列表中值为 obj 的第一个匹配项
list.reverse()反转列表中元素
list.sort(key = None, reverse= False)对原列表进行排序(见下)
list.clear()清空列表
list.copy()复制列表

sort() 方法:key 可以指定一个排序方法;reverse = True 降序, reverse = False 升序(默认升序)。

案例:(按照第二个元素排序并输出)

1
2
3
4
5
def takeSecond(List):
return List[1]
List = [(2,2), (4,1), (1,3)]
List.sort(key=takeSecond, reverse=True)
print('降序列表:', List)

输出结果:降序列表:[(1,3), (2,2), (4,1)]


元组 Tuple

  • 元组 tuple 和列表 list 类似,不同在于元组 tuple 元素不能修改。tuple 写在小括号里。

  • 元组的元素不可变,但可以包含可变对象,如 list。

注意:定义只有 1 个元素的 tuple,必须加逗号,否则被当为整型 int。如:t = (1,)

函数

函数描述
len(tuple)计算元组元素个数
max(tuple)返回元组中元素最大值
min(tuple)返回元组中元素最小值
tuple(list)将列表转换为元组

字典 Dictionary

根据键访问值

1
2
3
4
dict = {'Name': 'hassan', 'Age': 20, 'Class': 'three'}
print(dict['Age']) # 获取年龄
# print(dict['Sex']) # 获取不存在的key,会发生异常
print(dict.get('Sex')) # 获取不存在的key,获取到None的空内容,不会出现异常

在我们不确定字典中是否存在某个键而又想获取其值时,可以使用 get 方法,还可以设置默认值

1
2
age = dict.get('Sex')		# 'Sex'键不存在,所以age为None
age = dict.get('Sex', '男') # 若dict中不存在'Sex'这个键,就返回默认值'男'

删除元素

1
2
3
4
5
dict = {'Name': 'hassan', 'Age': 20, 'Class': 'three'}

del dict['Name'] # 根据键“Name”来删除
dict.clear() # 清空字典
del dict # 删除字典

循环遍历

1
2
3
4
for key in dict:
print(key, dict[key])
for key, val in dict.items():
print(key, val)

常用操作

前提:dict = {'Name': 'hassan', 'Age': 20, 'Class': 'three'}

常用操作描述
print(dict['hassan'])通过 key 来访问元素并打印,不存在会抛出异常
print(dict.get('hassan'))通过 get 方法来访问元素,不存在返回 None,不抛出异常
dict.keys()获取所有 key
dict.values()获取所有 value
dict['Age'] = 21新增键值对或修改 val
del dict['hassan']删除元素
dict.pop('hassan')将元素弹出
'hassan' in dict判断元素是否存在
dict.clear()清除字典内的元素
len()获取字典长度
max()获取最大的 key
min()获取最小的 key

集合 Set

  • 集合 set 和字典 dict 类似,也是一组 key 的集合,但不存储 value,由于 key 不能重复,所以在 set 中没有重复的 key。

  • set 是无序的,重复元素在 set 中自动被过滤。

常用操作

常用操作描述
for i in s1:
print(i)
遍历集合
s1.update(s2)更新集合
s1.add(5)向集合添加新元素
s1.remove(5)移除集合中的元素
val = s1.pop()弹出元素
s1.clear()清除元素
del s1删除元素
len()获取集合长度
max()获取最大的元素
min()获取最小的元素
set()其它类型对象转换成集合

函数

定义和调用函数

1
2
3
def 函数名():
代码
函数名()

例子:

1
2
3
4
# 定义一个函数,能够完成打印信息的功能
def printInfo():
print '人生苦短,我用Python'
printInfo();

带参函数

例子:

1
2
3
4
def add(a, b):
c = a + b
print c
add(8, 9) # 17

带返回值函数

例子:

1
2
3
def add(a, b):
return a+b
print(add(8, 9)) # 17

返回多个值

例子(求商和余数):

1
2
3
4
5
6
7
def divid(a, b):
shang = a//b
yushu = a%b
return shang, yushu

sh, yu = divid(5, 2)
print(sh, yu)

匿名函数

语法

1
lambda [arg1 [,arg2,    ..argn]]:expression

例子:

1
2
3
sum = lambda arg1, arg2: arg1 + arg2
# 调用sum函数
print ("相加后的值为:", sum( 10, 20 )) # 相加后的值为:30

lambda 匿名函数使用 if 条件语句

例子:

1
2
3
4
5
6
7
8
# 随意定义俩变量
wife = "unknown"
husband = "hassan"
# 随意定义方法
fun = lambda num: wife if num % 2 == 0 else husband

# 调用
print(fun(0)) # "unknown"

解析:当 num 的值是偶数时显示 wife,否则显示 husband


文件

文件,就是把一些数据存放起来,可以让程序下一次执行的时候直接使用,而不必重新制作一份,省时省力。

文件打开

使用 open 函数,可以打开一个已经存在的文件,或者创建一个新文件

格式:open(文件名,访问模式)

模板:f = open('test.txt', 'w')

说明:

访问模式说明
r以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
w打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
rb以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。
wb以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
ab以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
r+打开一个文件用于读写。文件指针将会放在文件的开头。
w+打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a+打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
rb+以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
wb+以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
ab+以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

文件关闭

格式:close()

模板:

1
2
3
4
# 新建一个文件,文件名为:test.txt
f = open('test.txt', 'w')
# 关闭这个文件
f.close()

文件写入

使用 write()可以完成向文件写入数据

例子:

1
2
3
f = open('test.txt', 'w')
f.write('hello hassan, i am here!')
f.close()

注意:如果文件不存在那么创建,如果存在那么就先清空,然后写入数据

文件读取

read

使用 read(num)可以从文件中读取数据,num 表示要从文件中读取的数据的长度(单位是字节),如果没有传入 num,那么就表示读取文件中所有的数据.

例子:

1
2
3
4
5
6
7
f = open('test.txt', 'r')
content = f.read(5)
print(content)
print("-------------")
content = f.read()
print(content)
f.close()
  • 如果 open 是打开一个文件,那么可以不用写打开的模式,即只写 open('test.txt')

  • 如果使用读了多次,那么后面读取的数据是从上次读完后的位置开始的

readlines

就像 read 没有参数时一样,readlines 可以按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为一个元素。

1
2
3
4
5
6
7
8
9
#coding=utf-8
f = open('test.txt', 'r')
content = f.readlines()
print(type(content))
i=1
for temp in content:
print("%d:%s"%(i, temp))
i+=1
f.close()

readline

一行一行地读取

1
2
3
4
5
6
7
#coding=utf-8
f = open('test.txt', 'r')
content = f.readline()
print("1:%s"%content)
content = f.readline()
print("2:%s"%content)
f.close()

文件重命名

os 模块中的 rename()可以完成对文件的重命名操作

格式:rename(需要修改的文件名, 新的文件名)

1
2
import os
os.rename("毕业论文.txt", "毕业论文-最终版.txt")

文件删除

os 模块中的 remove()可以完成对文件的删除操作

格式:remove(待删除的文件名)

1
2
import os
os.remove("毕业论文.txt")

创建文件夹

1
2
import os
os.mkdir("张三")

获取当前目录

1
2
import os
os.getcwd()

改变默认目录

1
2
import os
os.chdir("../")

获取目录列表

1
2
import os
os.listdir("./")

删除文件夹

1
2
import os
os.rmdir("张三")

错误与异常

TODO


常见问题集锦

pip install 第三方库 下载模块速度慢,或者不成功

1
pip --default-timeout=100 install <库名称> -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

除了豆瓣,也可以换成下面的国内镜像网站。

清华:https://pypi.tuna.tsinghua.edu.cn/simple

阿里云:http://mirrors.aliyun.com/pypi/simple/

中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/

华中科技大学:http://pypi.hustunique.com/

山东理工大学:http://pypi.sdutlinux.org/

☕欲知后事如何,

且听下回分解🍵