python环境配置
pip命令
1. pip install -i
2. 参考镜像网站
http://mirrors.aliyun.com/pypi/simple/
https://pypi.mirrors.ustc.edu.cn/simple/
http://pypi.hustunique.com/
http://pypi.sdutlinux.org/
http://pypi.douban.com/simple/
https://pypi.python.org/simple
python -m pip install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple/ 更新pip下载器
# 配置清华PyPI镜像(如无法运行,将pip版本升级到>=10.0.0)
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
1. 输入输出
print('hello', end='')
print('world')
print('dog','cat','mice') # 各单词之间默认以空格分隔
print('dog','cat','mice',seq=',') # 此时输出的各个单词之间以,分隔
input('请输入:') # 默认读取到的值为字符串,需要通过int等进行字符转
2. 错误类型
2.1TypeError:类型错误,对象用来表示值的类型非预期类型时发生的错误
错误例⼦:
age=18
print (‘我的年龄是’+age)
###
报错信息:TypeError: can only concat enat e st r (not "int ") t o st r这是类型错误,提示必须是⼀个字符串,不能是数字。
###
解决⽅法:在使⽤“+”做拼接的时候,必须使⽤字符串,或者把数字转化成字符串。
###
正确代码:
age=18
print (‘我的年龄是’+str(age))
2.2AttributeError: 属性错误,特性引用和赋值失败时会发生属性错误
###
tp=('1','3','5')
tp.append('7')
print (tp)
###
报错信息:At t ribut eError: 't uple' object has no at t ribut e 'append'
提示:属性错误:元组对象没有“append”的属性,简单来说元组是不可变对象,解决⽅法:把元组换成列表。
2.3NameError: 试图访问的变量名不存在
举个简单的例⼦,只运⾏⼀⾏print (a),会报错:NameError: name 'a' is not defined。简单来说,就是变量a没有定义,解决⽅法是在前⾯给a赋值,⽐如加上⼀⾏a=''。
###
还有⼀种需要⼩⼼处理的是:变量或者函数名拼写错误。如: name= '卡⻄'
###
print ('My name is ' + nane)
报错信息和上⾯⼀样:NameError: name 'nane' is not defined。这类错误只要根据报错信息,细⼼检查下拼写,就能很快解决~
2.4 SyntaxError:语法错误,代码形式错误
if name == '小李' # 缺少冒号
print('hello')
###
报错信息为:Synt axError: invalid synt ax提示是:语法错误,⾮法的语法。
###
当报错的时候,要注意回到错误信息的那⼀⾏,然后从下往上,慢慢查找,此处这个程序就是因为if语法忘了在判断语句后⾯加“:”,所以导致的错误。
###
另外,初学者写代码时注意:使⽤英⽂符号哦
###
2.5 KeyError: 在读取字典中的key和value时,若key不存在,就会触发该错误
###
举个⼩例⼦: dict ={'a':1,'b':2,'c':3}
print (dict ['d'])
报错信息为:KeyError: 'd'。
###
第⼀种解决⽅法,⾸先测试key是否存在,然后才进⾏下⼀步操作,如:
if 'd' in t:
print(t['d'])
else:
print('not exist')
第⼆种,利⽤dict 内置的get (key[,default ])⽅法,如:print (dict ['d'])改为print (dict .get ('d'))
###
如果key存在,则返回其value,否则返回None;使⽤这个⽅法永远不会触发KeyError。
###
2.6 IndexError:索引错误,使用的索引不存在,常常超出序列范围,序列中没有此索引
list1 = [2,3,4,5,6]
print(list1[7])
###
报错信息:IndexError: list index out of range提示:索引错误,列表索引超出了范围。
###
解决办法:回头看列表的⻓度,索引是要⼩于列表的⻓度的。上⾯的列表⻓度是5,⽽索引却要打印第七个,所以是超出了列表的⻓度。
###
2.7 IndentationError: 缩进错误
a=1
b=2
if a<b:
print a
###
报错:Indent at ionError: expect ed an indent ed block
原因:缩进有误,Python的缩进⾮常严格,⾏⾸多个空格,少个空格都会报错。
###
由于不熟悉python编码规则,不易查找,所以会成为新⼿常犯的⼀个错误。像def,class,if,for,while等代码块都需要缩进。
###
2.8 TabError: Tab和空格混用
###
相邻的两句的缩进需要统⼀使⽤tab或统⼀使⽤空格,不能混⽤。否则就会出现以下报错: TabError: inconsistent use of tabs and spaces in indentation。
###
tab键本质上是制表符,而不是缩进符,不同的文本编辑器中制表符代表的空格宽度不⼀,如果代码需要跨平台或跨编辑器读写,建议不要使用制表符(tab键)。
2.9 ZeroDivisionError: 除以零时导致的报错
2.10 KeyboardInterrupt: 程序执行时使用ctrl+c进行终止
3.基本数据类型
3.1字符串
python中对字符串的操作只是相当于创建了一个副本,如果不进行赋值,那么字符串不会有任何改变
1. 通过索引值对其中元素进行检索,比如s[3]
2. 也可以使用s[0:13]对一定的区域进行检索输出
3. 可以通过”+“实现两个字符串的拼接, 使用”*“实现两个字符串的重复
4. 使用len()返回字符串的长度
5. 通过str()函数转换为字符串
6. <string>.fun()
a. <string>.upper() 将字符串中的字母变成大写
b. <string>.lower 将字符串中的字母变成小写
c. <string>.capitalize() 首字母大写
d. <string>.strip 去除两边空格及去除指定字符 rstrip和lstrip对应右边空白或者左边空白
e. <string>.split 按指定字符分割字符串为数组
f. <string>.isdigit() 判断字符串是否为数字类型若是则返回True,反之则返回False
g. <string>.find 搜索指定字符串
h. <string>.replace 字符串替换
i. <string>.isupper() 或者islower()判断字符串中的值是否全为大写或者小写
isalpha(),只包含字母 isalnum(),只包含字母和数字 isdecimal()只包含数字字符 isspace()只包含空格 istitle(), 第一个大写,后面小写
7. for i in <string> 遍历字符串中的每个字符
8. startswith()和endswith() 判断字符串是否以某个字符串开头或结尾
9. ','.join(['my', 'name', 'is', 'ivan']) 以,拼接字符串
10. partition('w') 以w分割字符串,若果有多个w按第一个来分割,结果为三个字符串的元组
11. 'hello'.rjust(20,'-') 将hello填充到有二十个-的右端,右对齐,还有ljust(), center()
3.2列表
enumerate(list) 函数返回一个对应列表中的索引,另一个是索引所对应的值
1. 列表是有序的元素集合,列表元素可以通过索引访问单个元素
2. a=[0,1,2,3,4,5,6,7,8,9] ,a[0]=0
3. 列表的大小可以随时修改
4. 常用操作
a. <seq>+<seq> 连接两个序列
b. <seq>*<整数类型> 对序列进行整数次重复
c. <seq>[<整数类型>] 索引序列中的元素
d. len(<seq>) 序列中元素的个数
e. <seq>[<整数类型>:<整数类型>] 取序列中的一个子序列
f. for <var> in <seq> 对序列进行循环检举
g. <expr> in <seq> 成员检查,判断<expr>是否在序列中
h. <list>.append(x) 将元素x增加到列表的最后
i. <list>.sort() 将列表中的元素进行排序 按照ASCII排序,可以设置key=str.lower
j. <list>.reverse() 将列表元素反转
k. <list>.index() 返回第一次出现元素x的索引值
l. <list>.insert(i,x) 在位置i处插入新元素x
m. <list>. count(x) 返回元素x在列表中的数量
n. <list>.remove(x) 删除列表中第一次出现的元素x
o. <list>.pop(i) 取出列表中位置为i的元素并删除它
p. “字符串”.split() 可以将字符串拆分成一个列表,元素为一个个单词
5. enumerate(list) 函数返回一个对应列表中的索引,另一个是索引所对应的值
6. new_list = copy.copy(list), 如果是嵌套列表,则使用deepcopy,创建了一个副本
3.3字典
1. <键><值>对 比如通过身份证号码检索学生信息此时身份证号码即为键,学生信息即为值
2. python通过字典实现映射,
3. 字典是一个键值对的集合,以键为索引,同一个键信息对应一个值,一个键值对应一项
4. 序列只能用数字类型的键,字典可以用其他类型的键
5. 字典中元素是无序排列的
6. 序列通过地址映射到值,字典直接映射到值
7. 使用大括号可以创建字典并制定初始值
8. 使用中括号可以为字典添加一项 students = {"202-2013":"John"} students["202-1287"]="Susan"
9. 删除字典del 字典名
10. python 可以通过字典中的键返回其指定的值 若键不存在返回错误
11. 删除字典中的一项 del 字典名称[键]
12. 字典的遍历 for key in dictionryName: print(key+":"+str(dictionaryName[key]))
13. 多种遍历选项
14. 遍历字典的键key for key in dictionaryName.keys(): print(key)
15. 遍历字典的值value for value in dictionaryName.values(): print(value)
16. 遍历字典的项 for item in dictionaryName.items(): print(item)
17. 遍历字典的键值对 for item , value in adict.items(): print(item, value)
18. 判断一个键是否在字典中 <键> in <字典> 如果有则返回true,反之则返回false。
19. 其支持 -, <, >, <=, >=, ==, !=, and, or, not等运算判断符
20. keys():tuple 返回一个包含字典所有key的列表
21. values(): tuple 返回一个包含字典所有value的列表 tuple(students.values())
22. items():tuple 返回一个包含所有键值的列表
23. clear():None 删除字典中的所有项目students.clear()
24. get(key,0):value 返回字典中key对应的值, 若不存在则返回零
25. pop(key):val 删除并返回字典中key对应的值
26. update(字典) 将字典中的值添加到字典中
27. dir.setdefault('color', 'black') 当一个键不存在时对其进行默认值的设定
3.4元组
1. 指包含多个元素的类型 元组之间用逗号分隔 元组可以是空的也可以只包含一个元素,元组外侧可以使用括号也可以不使用
2. 一个元组可以是另一个元素的元组,此时作为元素的元组要注意加一个括号用以区分
3. 元组中各元素存在先后关系,可通过索引进行访问,比如t3=123,456,("hello","中国")
4. 元组定义以后既不能更改也不能删除
5. 只有一个数据的元组应在该数据之后添加一个逗号以表示其元组的形式
6. 可以使用tuple(),和list()进行与列表之间的转换
3.5 class定义类
class Restaurant:
"""餐厅菜谱"""
def __init__(self, restaurant_name, *cuisine_type):
self.restaurant_name = restaurant_name
self.cuisine_type = cuisine_type
self.number_served = 0
def describe_restaurant(self):
print(f"The {self.restaurant_name}'s cuisine type is {self.cuisine_type}")
def open_restaurant(self):
print(f"the {self.restaurant_name} is now open")
def set_number_served(self, number):
self.number_served = number
def increment_number_served(self, increment):
self.number_served += increment
# 类的继承
class IceCreamStand(Restaurant):
def __init__(self, restaurant_name, *cuisine_type):
super().__init__(restaurant_name, *cuisine_type)
self.flavors = ['peek', 'orange', 'apple', 'strawberry']
def present_flavors(self):
for flavor in self.flavors:
print(f"there are these flavors:{flavor}")
编码处理
对文档进行utf-8编码
html=urlopen()
bs_oj=BeautifulSoup(html,...)
content=bs_oj.find().get_text()
content=bytes(content,"utf-8")
content=content.decode("utf-8")
基本编码知识
1. ord()可以实现将字符转换为ASCII码
2. chr()可以实现将ASCII码转换为相应的字符
3. Unicode为通用编码 为十六进制编码 采用固定两个字节表示
4. UTF-8 可变长度的Unicode 可以用1到4个字节不同长度表示 中文日文韩文对应其三字节, 英文对应其单字节
5. GBK 编码是双字节编码 《汉字内码扩展规范》针对汉字的编码 为十六进制编码
6. 英文数字为ASCII码,只有ASCII的为文本文件,其他的为二进制文件
7. ISO-8859-1 为拉丁字母设计,会出现小写1/2以及版权标记符号
8. 其他字符集ISO-8859-9(土耳其), ISO-8859-2(德语),ISO-8859-15(法语)