标签:
(1)模块:用来从逻辑上组织Python代码(变量,函数,类,逻辑;实现一个功能),本质是.py结尾的python文件(文件名:test.py,对应的模块名:test)
(2)包:用来从逻辑上组织模块的,本质就是一个目录(必须带有一个__init__.py文件)
(1)import module_name导入某个模块
(2)import module_name,module2_name 导入多个模块
(3)from module_name import *
(4)from module_name import m1,m2,m3
其实可以看出import 可以导入单个模块,也可以导入多个模块,导入多个模块的时候,每个模块名以“,”隔开,从一个包里面导入模块,利用from
示例1
def sys_hello(): #在funct.py文件中定义一个sys_hello()的函数 print("hello,world") #函数输出hello,world sys_hello() import funct #在funct_module.py中导入这个函数,输出hello,world hello,world
示例2
def sys_hello(): #在funct.py文件中定义sys_hello()的函数 print("hello,world") #函数输出hello.world sys_hello() from funct import sys_hello #在funct_from.py中导入函数,输出hello,world
从上面的示例1,示例2可以看出,import和from import都可以从同一个package中导入Python模块,但是二者从本质上还是有点区别的,import 导入模块的本质就是把python文件解释一遍,import funct其实就是就是这样的一个表达式funct = “funct.py sys_hello” 就是将.py文件中的sys_hello函数赋值给funct这个变量,而from funct import sys_hello,就是直接将func.py的sys_hello函数直接加载到当前的.py文件中
1,import 的模块名字过长,可以用as来设置别名
2,导入包,其实就是执行包下面的__init__.py文件
示例3
from funct import sys_hello as hello
示例4
#创建modules_test目录 #在modules_test中创建modules_one package,会在modules_one中自动生成一个__init__.py文件 #__init__.py文件的内容为 print("i‘m init") #在modules_test中创建modules_two package, #funct_modules.py 内容 from modules_test import modules_one #执行结果为i‘m init
在编写python代码时经常会遇到需要导入父级目录的同级目录下的模块,这个时候就需要修改python中类似于环境变量的东西,sys.path,去读sys.path的内容
示例5
import sys print(sys.path) #输出结果如下,其实可以看出sys.path就是一个列表,当然我是在modules_two的package下编写了一个funct.py的脚本,执行结果中是将modules_two这个路径的元素放在第一位,这也就说明了,在import
#或者from import的时候python 文件首先会在当前路径下搜索导入的模块名,如果没有在再sys.path列表的其它路径中寻找,在所有路径都找完时仍没有找到要导入的模块时,python会抛出一个
#ImportError: No module named ‘xxx‘的异常 [‘F:\\python\\day5\\modules_two‘, ‘F:\\python‘, ‘E:\\Programs\\Python\\Python35\\python35.zip‘, ‘E:\\Programs\\Python\\Python35\\DLLs‘,
‘E:\\Programs\\Python\\Python35\\lib‘, ‘E:\\Programs\\Python\\Python35‘, ‘E:\\Programs\\Python\\Python35\\lib\\site-packages‘]
示例6
#解决示例5中的异常问题,我们需要认识os模块中的os.path方法 import os a = os.path.abspath(__file__) print(a) F:\python\day5\modules_one\funct.py #返回当前.py文件的绝对路径 print(os.path.dirname(os.path.abspath(__file__))) #返回.py文件的当前目录 print(os.paht.dirname(os.path.dirname(os.path.abspaht(__file__)))) #返回.py文件的当前目录的父级目录 sys.path.append(os.paht.dirname(os.path.dirname(os.path.abspaht(__file__)))) #上面的代码是将父级目录的上级目录路径增加到sys.path中,但是append方法是将路径当作元素 #直接追加到sys.path列表的末尾,这样的话,要寻找这个路径就需要遍历整个sys.path列表,所以更高效的 #做法是sys.path.insert(1,os.paht.dirname(os.path.dirname(os.path.abspaht(__file__))))
Python中表示时间有三种方式(1)时间戳(2)格式化时间字符串(3)元组(struct_time)共九个元素。由于Python的time模块实现主要调用C库,所以各个平台可能有所不同。
示例7
import time print(time.localtime()) ##返回本地时间 的struct time对象格式 print(time.time()) ##以时间戳的形式打印 print(time.gmtime()) ##返回utc时间的struc时间对象格式 print(time.altzone) ##返回与utc时间的时间差,以秒计算 print(time.asctime()) ##返回格式为Mon Aug 22 21:36:10 2016 time.sleep(3) ##睡眠3秒
示例8
import time string_2_struct = time.strptime("2016/05/22","%Y/%m/%d") #将日期字符串转成 struct时间对象 print(string_2_struct) struct_2_stamp = time.mktime(string_2_struct) #将struct时间对象转成时间戳 print(struct_2_stamp) print(time.gmtime(time.time()-86640)) #将utc时间戳转换成struct_time格式 print(time.strftime("%Y-%m-%d %H:%M:%S",time.gmtime())) #将utc struct_time格式转成指定的字符串格式
示例9
import datetime print(datetime.datetime.now()) #当前时间 print(datetime.datetime.now() + datetime.timedelta(3)) #三天后的时间 print(datetime.datetime.now() + datetime.timedelta(-3)) #三天前的时间 print(datetime.datetime.now() + datetime.timedelta(hours=3)) #三小时前 print(datetime.datetime.now() + datetime.timedelta(minutes=30)) #三十分钟前 c_time = datetime.datetime.now() print(c_time.replace(minute=3,hour=2)) #时间替换
1,random.randrange(1,10), 返回大于等于1,小于10的一个随机数,randrange()是不能直接访问的,需要导入 random 模块,然后通过 random 静态对象调用该方法。
2,random.randrange参数,
random.randrange ([start,] stop [,step])
start -- 指定范围内的开始值,包含在范围内。
stop -- 指定范围内的结束值,不包含在范围内。
step -- 指定递增基数。
示例10
import random print(random.randrange(1,9)) #返回数字6
3, random.randinit
示例11
print random.randint(12,20) #生成的随机数n: 12 <= n <= 20 print random.randint(20,20) #结果永远是20
4,random.uniform
random.uniform的函数原型为:random.uniform(a, b),用于生成一个指定范围内的随机符点数,两个参数其中一个是上限,一个是下限。如果a > b,则生成的随机数n: a <= n <= b。如果 a <b, 则 b <= n <= a。
示例12
print(random.uniform(10,20)) #返回17.634431913477243 print(random.uniform(20,10)) #返回13.432838516361562
5,random.shuffle
示例13
import random l = [1,2,3,4,5,6,7] random.shuffle(l) print(l) #返回[3, 2, 1, 7, 6, 5, 4]
6,生成一个5位的随机码,包括数字和英文字符程序
示例14
import random current = "" for i in range(5): cur = random.randrange(0,5) if cur == i: #当生成的随机数于i的值相等时,随机数替换为一个英文字符 cur = chr(random.randint(65,90)) else: cur = random.randint(0,9) current +=str(cur) #拼接字符串 print(current) #返回5位随机码
示例15
import os print(os.getcwd()) #打印当前路径 os.chdir("F:\python\day5") #切换目录到指定目录,相当于shell中的cd print(os.curdir) #返回当前路径“.” print(os.pardir) #返回上级路径“..” os.makedirs(‘dirname1/dirname2‘) #递归创建目录,相当于shell中的mkdir -p os.removedirs(‘dirname1‘) #若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推 os.mkdir(‘dirname‘) #生成单级目录;相当于shell中mkdir dirname os.rmdir(‘dirname‘) #删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname os.remove() #删除一个文件 os.rename("oldname","newname") #重命名文件/目录 print(os.stat("F:\python\day5")) #获取文件/目录信息返回
#os.stat_result(st_mode=16895, st_ino=844424930132651, st_dev=951340568, #st_nlink=1, st_uid=0, st_gid=0, st_size=0, st_atime=1471878561, st_mtime=1471878561, #st_ctime=1471677015) print(os.sep) os.system("bash command") #运行shell命令,直接显示 os.environ #获取系统环境变量 os.path.abspath(path) #返回path规范化的绝对路径 os.path.split(path) #将path分割成目录和文件名二元组返回 os.path.dirname(path) #返回path的目录。其实就是os.path.split(path)的第一个元素 os.path.basename(path) #返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素 os.path.exists(path) #如果path存在,返回True;如果path不存在,返回False os.path.isabs(path) #如果path是绝对路径,返回True os.path.isfile(path) # 如果path是一个存在的文件,返回True。否则返回False os.path.isdir(path) #如果path是一个存在的目录,则返回True。否则返回False os.path.join(path1[, path2[, ...]]) #将多个路径组合后返回,第一个绝对路径之前的参数将被忽略 os.path.getatime(path) #返回path所指向的文件或者目录的最后存取时间 os.path.getmtime(path) #返回path所指向的文件或者目录的最后修改时间
1,sys.argv 获取脚本执行的参数,其中第一个参数
示例16
#!/usr/bin/env python import sys print(sys.argv) print(sys.argv[1]) #./sys_argv.py 1 2 3 4 #返回[‘./sys_argv.py‘, ‘1‘, ‘2‘, ‘3‘, ‘4‘] #1 #其中第一个元素为脚本本身
2,sys模块其它方法
示例17
sys.exit(n) #退出程序,正常退出时exit(0) sys.version #获取Python解释程序的版本信息 sys.maxint #最大的Int值 sys.path #返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值 sys.platform #返回操作系统平台名称
示例18
shutil.copyfile( src, dst) #从源src复制到dst中去。当然前提是目标地址是具备可写限。否则会抛出一个异常信息为IOException. 如果当前的dst已存在的话就会被覆盖掉 shutil.move( src, dst) #移动文件或重命名 shutil.copymode( src, dst) #只是会复制其权限其他的东西是不会被复制的 shutil.copystat( src, dst) #复制权限、最后访问时间、最后修改时间 shutil.copy( src, dst) #复制一个文件到一个文件或一个目录 shutil.copy2( src, dst) #在copy上的基础上再复制文件最后访问时间与修改时间也复制过来了,类似于cp –p的东西 shutil.copy2( src, dst) #如果两个位置的文件系统是一样的话相当于是rename操作,只是改名,如果是不在相同的文件系统的话就是做move操作 shutil.copytree( olddir, newdir, True/Flase) #把olddir拷贝一份newdir,如果第3个参数是True,则复制目录时将保持文件夹下的符号连接,如果第3个参#数是False,则将在复制的目录下生成物理副本来替代符号连接 shutil.rmtree( src ) #递归删除一个目录以及目录内的所有内容
8, xml 处理模块xml.etree.ElementTree
示例19:
(1),xml文件
<?xml version="1.0"?> <data> <country name="Liechtenstein"> <rank updated="yes">2</rank> <year>2008</year> <gdppc>141100</gdppc> <neighbor name="Austria" direction="E"/> <neighbor name="Switzerland" direction="W"/> </country> <country name="Singapore"> <rank updated="yes">5</rank> <year>2011</year> <gdppc>59900</gdppc> <neighbor name="Malaysia" direction="N"/> </country> <country name="Panama"> <rank updated="yes">69</rank> <year>2011</year> <gdppc>13600</gdppc> <neighbor name="Costa Rica" direction="W"/> <neighbor name="Colombia" direction="E"/> </country> </data>
(2),读取xml
import xml.etree.ElementTree as ET tree = ET.parse("xml_test.xml") root = tree.getroot() print(root.tag) #输出xml最外层的标签,返回data # 遍历xml文档 for child in root: print(child.tag, child.attrib) for i in child: print(i.tag, i.text) #返回 country {‘name‘: ‘Liechtenstein‘} rank 2 year 2008 gdppc 141100 neighbor None neighbor None country {‘name‘: ‘Singapore‘} rank 5 year 2011 gdppc 59900 neighbor None country {‘name‘: ‘Panama‘} rank 69 year 2011 gdppc 13600 neighbor None neighbor None #以上遍历方法可以输出标签和标签的值,但是标签内的值没有读取 #只遍历gdppc 节点以及节点的值 for node in root.iter(‘gdppc‘): print(node.tag, node.text)
(3),修改xml
import xml.etree.ElementTree as ET tree = ET.parse("xmltest.xml") root = tree.getroot() for node in root.iter(‘year‘): new_year = int(node.text) + 1 node.text = str(new_year) node.set("updated", "yes") #修改了year的值,对year的值加1 tree.write("xml_test.xml") #重新写回xml文件 #删除node for country in root.findall(‘country‘): rank = int(country.find(‘rank‘).text) if rank > 50: root.remove(country) #删除掉rank排名大于50的国家 tree.write(‘output.xml‘) #重新写回文件
9,ConfigParser模块
用于生成和修改常见配置文档,当前模块的名称在 python 3.x 版本中变更为 configparser。
示例20
(1),生成一个如下格式的配置文件
[DEFAULT] ServerAliveInterval = 45 Compression = yes CompressionLevel = 9 ForwardX11 = yes [bitbucket.org] User = hg [topsecret.server.com] Port = 50022 ForwardX11 = no
代码如下
import configparser config = configparser.ConfigParser() config["DEFAULT"] = {‘ServerAliveInterval‘: ‘45‘, ‘Compression‘: ‘yes‘, ‘CompressionLevel‘: ‘9‘} config[‘bitbucket.org‘] = {} config[‘bitbucket.org‘][‘User‘] = ‘hg‘ config[‘topsecret.server.com‘] = {} topsecret = config[‘topsecret.server.com‘] topsecret[‘Host Port‘] = ‘50022‘ # mutates the parser topsecret[‘ForwardX11‘] = ‘no‘ # same here config[‘DEFAULT‘][‘ForwardX11‘] = ‘yes‘ with open(‘example.ini‘, ‘w‘) as configfile: config.write(configfile) #生成example.ini
#其实可以看出每个以[]为标志的模块,里面的值都是以字典形式生成的
(2),读取example.ini文件
import configparser config = configparser.ConfigParser() config.read(‘example.ini‘) print(config.sections()) #读取[]中的域的值 deafault除外 print(config[‘bitbucket.org‘][‘User‘]) #读取bitbucker.org 中user的值 for key in config[‘bitbucket.org‘]: #读取bitbucker.org 以及deafault中的key print(key)
(3),修改example.ini文件
# ########## 读 ########## secs = config.sections() print secs options = config.options(‘group2‘) print options item_list = config.items(‘group2‘) print item_list val = config.get(‘group1‘,‘key‘) val = config.getint(‘group1‘,‘key‘) # ########## 改写 ########## sec = config.remove_section(‘group1‘) config.write(open(‘i.cfg‘, "w")) sec = config.has_section(‘wupeiqi‘) sec = config.add_section(‘wupeiqi‘) config.write(open(‘i.cfg‘, "w")) config.set(‘group2‘,‘k1‘,11111) config.write(open(‘i.cfg‘, "w")) ############ 删除 ########## config.remove_option(‘group2‘,‘age‘) config.write(open(‘i.cfg‘, "w"))
‘.‘ 默认匹配除\n之外的任意一个字符,若指定flag DOTALL,则匹配任意字符,包括换行 ‘^‘ 匹配字符开头,若指定flags MULTILINE,这种也可以匹配上(r"^a","\nabc\neee",flags=re.MULTILINE) ‘$‘ 匹配字符结尾,或e.search("foo$","bfoo\nsdfsf",flags=re.MULTILINE).group()也可以 ‘*‘ 匹配*号前的字符0次或多次,re.findall("ab*","cabb3abcbbac") 结果为[‘abb‘, ‘ab‘, ‘a‘] ‘+‘ 匹配前一个字符1次或多次,re.findall("ab+","ab+cd+abb+bba") 结果[‘ab‘, ‘abb‘] ‘?‘ 匹配前一个字符1次或0次 ‘{m}‘ 匹配前一个字符m次 ‘{n,m}‘ 匹配前一个字符n到m次,re.findall("ab{1,3}","abb abc abbcbbb") 结果‘abb‘, ‘ab‘, ‘abb‘] ‘|‘ 匹配|左或|右的字符,re.search("abc|ABC","ABCBabcCD").group() 结果‘ABC‘ ‘(...)‘ 分组匹配,re.search("(abc){2}a(123|456)c", "abcabca456c").group() 结果 abcabca456c ‘\A‘ 只从字符开头匹配,re.search("\Aabc","alexabc") 是匹配不到的 ‘\Z‘ 匹配字符结尾,同$ ‘\d‘ 匹配数字0-9 ‘\D‘ 匹配非数字 ‘\w‘ 匹配[A-Za-z0-9] ‘\W‘ 匹配非[A-Za-z0-9] ‘s‘ 匹配空白字符、\t、\n、\r , re.search("\s+","ab\tc1\n3").group() 结果 ‘\t‘ ‘(?P<name>...)‘ 分组匹配 re.search("(?P<province>[0-9]{4})(?P<city>[0-9]{2})(?P<birthday>[0-9]{4})","371481199306143242").groupdict("city") 结果{‘province‘: ‘3714‘, ‘city‘: ‘81‘, ‘birthday‘: ‘1993‘} 常用匹配方法 re.match 从头开始匹配 re.search 匹配包含 re.findall 把所有匹配到的字符放到以列表中的元素返回 re.splitall 以匹配到的字符当做列表分隔符 re.sub 匹配字符并替换
标签:
原文地址:http://www.cnblogs.com/system-public/p/5793739.html