python之路-2
| 一、模块import re copy |
1、模块的引用
通过import命令来引用模块(无论是系统自带的模块还是后添加的第三方模块)
还有一点注意的是:在用import 引用模块时,系统首先在当前目录下查找有没有对应的模块,也就是你在当前目录下写的同名的.py文件,所以大家注意了,
以后写文件名称的时候要注意了,不要和系统“撞库”了,不然受伤的还是你自己,那怎样才能避免“撞库”呢?只有一个办法,去熟知系统库。
2、两个基础模块
Import sys
首先呢,系统自带的库都放在python/lib/下面的.py文件里,一共没几个,自己从第三方加进来的库都放在python/lib/site-packages/目录下,奇怪的是,
在系统自带的库中没有sys.py文件!网上有人说这个库已经内置在系统当中了(通过C),所以在python/下是找不到sys.py文件的。(以上都是在python3.x环境下)
再来说说用法
1、import sys 调用模块
2、print(sys.path) 调用模块的方法并输出
3、方法写在模块中,通过“模块名”.“方法名”来实现,类似于java
Import os
首先os模块是和系统打交道的模块,功能方面类似于linux中shell,通过一些命令来输出系统中对应文件名下的文件、创建文件夹、创建文件、等等
再来说说用法
1、import os
2、os.system(‘dir’) 打印当前目录下的所有文件,这个方法只是将结果输出到屏幕上,也就是说:mod_dir = os.system(‘dir’) 是无法赋值的,
最后mod_dir接受到的值是0或者1(类似于linux,0表示该方法执行成功,1表示执行错误)
3、那么怎么样把打印出来的目录信息赋给一个变量呢?当然有,用os.popen(‘dir’).read()方法来赋值,如:
Mod_dir = os.popen(‘dir’).read() (注意后面的read()不要丢了,不然赋的值是内存地址,而不是目录下文件的信息)
4、创建文件夹用 os.mkdir(‘dirction_name’)这个方法是不是让你想起了linux中的mkdir(make dirction)这样就会在当前的目录下创建一个‘dirction_name’的文件夹。
| 二、.pyc文件和encoding&decoding |
.pyc文件

Python是一个解释语言,还有php,ruby,java也都是解释性语言,
编译型语言有:C、C++
编译型语言执行速度快,解释性语言相对较慢,这些是和语言的执行方式有关,便宜型语言是在代码运行之前,把全部代码进行编译成机器语言,
而解释性语言是解释一句执行一句,所以相对较慢。
Python虽然是解释型语言,但是在执行之前还是简单的编译了一遍,在python的目录中可以看到.pyc文件,这是预编译的产物,然后再执行的时候再翻译一句执行一句,这样是为了提高代码的运行效率,比如:我们自己写的.py文件可以在其他的文件中调用,调用的时候,系统会去工作目录中找你调用的.py的.pyc文件,找不到就预编译.py文件再执行。找到文件之后比较时间,如果.pyc文件的时间比.py文件新,则调用文件执行,如果.py文件时间比.pyc文件新,则将.py文件预编译一下再执行。
解码&编码
xuwei = '我爱你中国'
print(xuwei)
print(xuwei.encode(encoding='utf-8'))
print(b'\xe6\x88\x91\xe7\x88\xb1\xe4\xbd\xa0\xe4\xb8\xad\xe5\x9b\xbd'.decode())
print(b'\xe6\x88\x91\xe6\x98\xaf\xe8\xb0\x81\xef\xbc\x9f'.decode())
每个汉字占三个字节,其中\x代表16进制,所以可以改下\x后面的值,decoding出来的汉字就会变化,也可以将它们三个三个的分开,也是可以独立decoding的。
| 三、数据类型 |
布尔类型
bool=False;
print bool;
bool=True;
print bool;
整数
int=20;
print int;
浮点数
float=2.3;
print float;
| 四、列表 |
1、创建列表
Name_list = [‘元素‘,’元素‘,········]
注:和数据库中插入数据时是一样的,数字是不需要加引号的!
元祖内元素的排序是0,1,2,·····
dormitory = ['xuwei','doubuyuan','caoyuhao',['suchagal','sugar'],'xiawenjun'] print(dormitory) dormitory.append('xuwei') #在最后面插入‘xuwei’ print(dormitory) dormitory.insert(2,'xuwei') #数字代表插入的值在列表中的序号 print(dormitory)
del dormitory[1] #删除列表第二值 print(dormitory) dormitory.pop(1) #删除列表第二值 print(dormitory) dormitory.remove('caoyuhao') #删掉‘caoyuhao’ print(dormitory)
dormitory[1] = 'xuwei' #将第二个值改成‘xuwei’ print(dormitory)
print(dormitory[0:3]) #输出第一个到第三个 print(dormitory[-1]) #输出最后一个 print(dormitory[-3:-1]) #输出倒数第三个到倒数第二个 print(dormitory[-3:]) #输出后三个 print(dormitory[::2]) #以2为步长来输出dormitory
dormitory.reverse() #列表数据反转 print(dormitory) print(dormitory.count('xuwei')) #统计‘xuwei’的个数 dormitory.clear() #清空列表 print(dormitory) dormitory.sort() #列表中的元素排序(按照ascii) print(dormitory) dormitory1 = [1,2,3] dormitory.extend(dormitory1) #扩展列表 print(dormitory,dormitory1) print(dormitory.index("caoyuhao")) #获取某个元素的序号
dormitory2 = dormitory.copy() #浅copy import copy dormitory2 = copy.deepcopy(dormitory) #深copy print(dormitory2) dormitory[3] = 'suchagal' dormitory[4][1] = 'daweige' print(dormitory) print(dormitory2) 深copy要导入copy模块,在用法上也不一样,可以参照以上例子,至于用处,“两个人用到同一张银行卡的时候—浅copy”深copy就相当于是一个模板,可以copy过来用,深copy占的内存空间是比浅copy大的,我想看懂例子就明白了。
2、元组
就是将列表的中括号换成小括号如:
Tuple_list = (‘元素’,’元素’,’元素’····)
关于元组的方法就只有count和index方法,元组中的数据是不可以修改的,所以在别人的代码中出现元组就是不可改的意思。
| 五、字符串操作 |
字符串操作就是将一个字符变成你想要的样子(当然是有规律的转换),“就让游戏开始吧”
string = 'suchagal is {} he\t is {} years old' print(string.count('i')) #统计string中的‘i'的个数 print(string.capitalize()) #首字母大写 print(string.center(50,'-')) #输出的是:--------suchagal is {} he is {} years old--------- print(string.encode(encoding='utf-8')) #看来只有中文才有encode哇 print(string.startswith('su')) #顾名思义,判断以什么开头 print(string.endswith('ld')) #判断以什么结尾输出的结果:True和false print(string.expandtabs(tabsize=20)) #扩展tab字段长度不常用 print(string.find('s')) #查找字符串中’s'的index print(string.rfind('i')) #输出最右面的‘i’的序号 print(string.index('s')) #和上面find方法一样用法 print(string.rindex('i')) #输出最右面的‘i’的序号 string1 = '我suchagal is {0} he is {1} years old' print(string1.format('xuwei',23)) #常用,用作替换,也可以把大括号的数字去掉,也可以,数字表示插入的顺序 string2 = '我suchagal is {name} he is {age} years old' print(string2.format(name='xuwei',age=23)) #用法不一样,意思是一样的,但是有时候只能用这种方法 print(string2.format_map({'name':'xuwei','age':23})) #format_map字典对应插入 print('12242'.isdigit()) #判断是否为数字,返回Ture或false print('242'.isnumeric()) #判断字符串是否全部为数字,真返回Ture,假返回false print('121'.isdecimal()) #判断是否为十进制数,返回True或false print('9aa'.isalnum()) #判断字符串中的值是否由数字或者字母组成,返回True或false print('9sdfa'.isalpha()) #判断字符串中的值是否由字母组成,返回True或false print('aaada'.islower()) #判断字符串中是否都是小写字母,真返回Ture,假返回false print('AFDFA'.isupper()) #判断字符串是否全部为大写字母,真返回Ture,假返回false print('afa adf'.isprintable()) #判断是否可打印的,真返回Ture,假返回false print(' '.isspace()) #判断字符串是否为空白,真返回Ture,假返回false print('_sa1'.isidentifier()) #判断是否为合法的标识符,就是可否作为变量,可以就返回True,otherwise,false print('|'.join(['i','love','you'])) #输出:i|love|you print('|'.join('congratulations')) #输出:c|o|n|g|r|a|t|u|l|a|t|i|o|n|s print(string.ljust(40,'*')) #输出:suchagal is {} he is {} years old****** print(string.rjust(40,'*')) #输出:******suchagal is {} he is {} years old print('ASDAD'.lower()) #输出:asdad将所有的大写转换成小写 print('asfAFs'.upper()) #输出:ASFAFS将所有的小写转换成大写 print('\n\n\tadfa'.lstrip()) #输出时将左面的回车、tab全部省略掉 print('\n\tadfa\n\n\n'.rstrip()) #输出时将右面的回车、tab全部省略掉 print('\n\tadfa\n\n\n'.strip()) #输出是将所有的\n都去掉 q = str.maketrans('0123456789','abcdefghij') xuwei = '18652890936' print(xuwei.translate(q)) #print(q) #输出:{48: 97, 49: 98, 50: 99, 51: 100, 52: 101, 53: 102, 54: 103, 55: 104, 56: 105, 57: 106} print('suchagal\'s name is xuwei'.replace('i','I',1)) #输出:suchagal's name Is xuwei print(string.rpartition('is')) #输出:('suchagal is {} he\t ', 'is', ' {} years old') print(string.partition('is')) #输出:('suchagal ', 'is', ' {} he\t is {} years old') print('1+2+3+4'.rsplit('+',2)) #输出:['1+2', '3', '4'] print('1+2+3+4'.split(sep='+',maxsplit=2)) #输出:['1', '2', '3+4'] #通过sep分隔字符,并去掉该字符,maxsplit分隔的个数,rsplit从右边开始分隔,split从左边开始分隔 print('ks\nda\raa\t'.splitlines(True)) #在\n和\r处将字符串分隔,不省略\n\和r,输出:['kalks\n', 'ada\r', 'aa\t'] print('ks\nda\raa\t'.splitlines()) #在\n和\r处将字符串分隔,并省略\n\和r,['kalks', 'ada', 'aa\t'] print('My Name Is Xuwei'.swapcase()) #大小写互换 print(string.zfill(50)) #输出:0000000000000000suchagal is {} he is {} years old
以上的内容又多又杂,记住只能靠背,但是有些通过单词的意思还是可以记住的,我觉得多用才是记住的最优途径。
| 六、字典 |
创建一个value值都一样的字典,但是缺点是无法将字典中的value值单独改掉,牵一发而动全身。和上面的copy有点像,指向同一个内存地址。如下:
c = dict.fromkeys([6,7,8],[1,{"name":"suchagal"},444])
print(c )
c[7][1]['name'] = "sugar xu"
print(c)
print(info.items() )
将两个字典合并到一起,发现有重复的部分自动覆盖,没有重复的创建key和values。如下:
info = { 'stu1101': "TengLan Wu", 'stu1102': "LongZe Luola", 'stu1103': "XiaoZe Maliya", } b ={ 'stu1101': "Alex", 1:3, 2:5 } info.update(b) print(info )
查
查询字典中的全部内容,直接输入字典名称,如:

查询分组输出

查询具体的key对应的values值。print(info.get('xuwei'))
查询具体的值时用get这个方法,因为上面的方法一旦你的字典中没有这个值就会报错,而get方法是不会报错的。

查询所有key的值

查询所有的value值

判断字典中是否存在某一个值(python变成的时候会用到)(python3.x中已经不兼容dicname.has_keys(‘sugar’)这种方法了)

增
删除字典中最后一个key和values

删除具体一项

可以看出字典中的值是严格一一对应的,这一点和元组/列表不一样;
删
删除字典中最后一个key和values

删除具体一项

遍历字典
遍历字典中的所有key

遍历字典中所有key和其对应的值(这里遍历的两个值可以通过%s来引用)下面列出了两种方法,上面的推荐使用,通过for循环把i和dicname[i]的值打印出来。下面的方法是把字典转化成列表在打印结果。数据量小看不出来快慢,但是数据量大,就很明显。

就写这么多了,有什么其他用法,以后更新。
一句励志英文:
Difficult circumstances serve as a textbook of life for people


浙公网安备 33010602011771号