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大的,我想看懂例子就明白了。
深、浅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

 

posted @ 2017-12-24 14:29  suchagal  阅读(366)  评论(0)    收藏  举报