python开发 【第四篇】模块

一   模块的作用:提高代码的可维护性

二  模块分为:

1 python标准库

2 第三方模块

3 应用程序自定义模块

三  impor的作用t:

1 执行对应文件

2 引入变量名

被执行文件的路径要和执行文件路径相同

标红是因为pycharm无法识别,不是输入错误

cal.py要与bin.py路径相同才可以用import调用

import os,sys
EASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))    #将bin.py的路径改为web
print(EASE_DIR)
sys.path.append(EASE_DIR)
from web1.web2 import cal
print(cal.add(3,7))


G:\untitled\python\web
10

 

四  __name__=='__main__'

用于调试

调用模块时__name__!='__main__',其下面的程序不会运行

 五  时间模块time

时间戳 :1970/1/1距离现在的秒数

time.time()

import time
print(time.time())
print(time.localtime())
print(time.gmtime())
print(time.mktime(time.localtime()))
print(time.strftime('%Y-%m-%d-%X',time.localtime()))
print(time.strptime('2017:01:01:16:52:00','%Y:%m:%d:%X'))
#asctime和ctime不用自己定义参数
print(time.asctime())
print(time.ctime())
import datetime
print(datetime.datetime.now())


1534935829.1602685
time.struct_time(tm_year=2018, tm_mon=8, tm_mday=22, tm_hour=19, tm_min=3, tm_sec=49, tm_wday=2, tm_yday=234, tm_isdst=0)
time.struct_time(tm_year=2018, tm_mon=8, tm_mday=22, tm_hour=11, tm_min=3, tm_sec=49, tm_wday=2, tm_yday=234, tm_isdst=0)
1534935829.0
2018-08-22-19:03:49
time.struct_time(tm_year=2017, tm_mon=1, tm_mday=1, tm_hour=16, tm_min=52, tm_sec=0, tm_wday=6, tm_yday=1, tm_isdst=-1)
Wed Aug 22 19:03:49 2018  #结构化时间转变为固定字符串形式
Wed Aug 22 19:03:49 2018  #时间戳转变为固定字符串形式
2018-08-22 19:03:49.193250

六  random模块 #随机取值

import random
print(random.random()) #(0,1)之间的一个浮点数
print(random.randint(1,3)) # 取1,2,3中的一个
print(random.randrange(1,3)) #取1,2中的一个
print(random.sample([1,2,3],2))#取1,2,3中的两个
print(random.choice([1,2,3])) #取1,2,3中的一个
print(random.uniform(1,3)) #取(1,3)之间的一个浮点数
a=[1,2,4,5]
random.shuffle(a)  #将a中数字随机排列
print(a)

0.7347057697582601
1
2
[2, 3]
1
2.273764153373582
[2, 1, 5, 4]
import random
#随机产生五个由数字字母组成字符串
def a():
    v=''
    for i in range(5):
        b=random.randint(0,9)
        c=chr(random.randint(65,122))
        s=str(random.choice([b,c]))
        v+=s
    return v
print(a())

0i02j

 七  os模块

import os
print(os.getcwd()) #获取当前工作目录
os.chdir('..')   #修改目录   ..返回上一级
print(os.getcwd())
os.makedirs('dirname1/dirname2') #生成递归目录
os.removedirs('dirname1/dirname2') #目录若为空删除并返回上一层,上一层若为空删除
os.mkdir('') #生成单级目录
os.rmdir('') #删除单级目录若不为空无法删除报错
print(os.listdir(''))#列出指定目录下所有的文件目录隐藏文件以列表方式打印
os.remove('') #删除一个文件
os.rename('','') #重命名
print(os.stat('')) #获取文件目录信息
print(os.sep) #输出操作系统特定分隔符 win '\' linux '/'
print(os.pathsep) #输出分割文件路径的字符串  win ; Linux :
print(os.system('dir')) #运行shell命令直接显示
print(os.path.split(r'G:\untitled\python\os_\os-1.py')) #将path分割成目录文件名返回
print(os.path.basename(r'G:\untitled\python\os_\os-1.py')) #返回path最后的文件名
print(os.path.exists(r'G:\untitled\python\os_\os-1.py')) #path路径存在返回True 不存在返回Flase
a='python\os_'
b='os-1.py'
print(os.path.join(a,b)) #ab拼接
print(os.path.getatime(''))#最后访问时间
print(os.path.getmtime(''))#最后修改时间
print(os.environ) #获得系统环境变量
print(os.path.abspath('os-1.py')) #获取path的绝

 八  sys模块

import sys,time
print(sys.platform) #返回操作系统平台名称
print(sys.version)#返回python解释器程序版本信息
print(sys.argv)#命令行参数list,第一个元素是程序本身路径 和input('>>>')功能一样
command=sys.argv[1]
path=sys.argv[2]
if command=='post':
    pass
if command=='get':
    pass
print(sys.path)#返回模块路径
sys.stdout.write('#')
sys.stdout.write('#') #打印,所有内容打印完一起显示
for i in range(0,10):
    sys.stdout.write('#')
    sys.stdout.flush()  #刷新  打印一次显示一次
    time.sleep(1)

 九 pickle模块

import pickle
a={'a':2}
j=pickle.dumps(a)
print(type(j)) #<class 'bytes'>
f=open('pickle','wb')
f.write(j)#----------等价于pickle.dump(a,f)

r=open('pickle','rb')
data=pickle.loads(r.read()) #----等价于pickle.load(f)
print(data)

十 shelve 模块

import shelve
f=shelve.open(r'shelve')
f['stul_info']={'name':'alex','age':'18'} #生成三组文件
f.close()
print(f.get('stul_info')['age'])

十一  json模块  #可用于任何语言之间的数据交换

import json
dic={'name':'alex'}
f_write=open("hello","w")
data=json.dumps(dic)#data=json.dump(dic,f_write)
f_write.write(data)
f_read=open("hello","r")
data=json.loads(f_read.read())# data=json.load(f_read)
print(data)

 十二 logging模块 #日主模块

import logging
logging.basicConfig(filename='logger.log',level=logging.DEBUG,
                    format='%(asctime)s,[%(lineno)d],%(message)s,'
                    '%(filename)s',filemode='w')  #filename打印到文件中
#debug,info,warning,error,critical为日志等级
logging.debug('hello') 
logging.info ('hello')
logging.warning('hello')
logging.error('hello')
logging.critical('hello')
import logging
def logger():
    logger=logging.getLogger()
    t=logging.FileHandler('logger.txt') #向文件发送
    w=logging.StreamHandler() #向屏幕发送
    logger.addHandler(t)
    logger.addHandler(w)
    f=logging.Formatter('%(asctime)s,%(message)s')
    t.setFormatter(f)
    w.setFormatter(f)
    return logger
logger=logger()
logging.debug('hello')
logging.info ('hello')
logging.warning('hello')
logging.error('hello')
logging.critical('hello')

十三 hashlib模块

import hashlib
obj = hashlib.md5() # md5不能反解
obj=hashlib.md5("sdcs".encode('utf8'))#加严  
obj.update("hello".encode('utf8'))
print(obj.hexdigest())

十四 configparser模块 #文件的存删改查

import configparser
config=configparser.ConfigParser()
config["DEFAULT"]={'ServerAliveInterval':'45'}
config['bitbucket.org']={}
config['bitbucket.org']['User']='fg'
config['topsecret.server.com']={}
topsecret=config['topsecret.server.com']
topsecret['Host Port']='501'
topsecret['For']='no'
with open('example.ini','w') as f:
    config.write(f)
config.read('example.ini')
print(config.sections())
for key in config['bitbucket.org']:
    print(key)
print(config.options('bitbucket.org'))
print(config.items('bitbucket.org'))
print(config.get('bitbucket.org','serveraliveinterval'))
config.add_section('fg')
config.set('fg','gj','j')
config.remove_section('bitbucket.org')
config.remove_option('topsecret.server.com','for')
config.write(open('i.cfg',"w"))

 

十五re模块  #正则

普通字符:数字字母大部分特殊符号

元字符:.  *  \  () $ ^ ? [] {} + |

#findall匹配全部
print
(re.findall("a.*","a\';.@#$%^&\n")) #. 可以匹配除换行符外的所有字符 ["a';.@#$%^&"] print(re.findall("a.*?","asd")) # *前面的字符重复0到无穷 ?前面的字符重复0到1次 ['a'] print(re.findall("a.+?","asd")) #+前面的字符重复1到无穷次 ['as'] print(re.findall("a.{3}","asdfcx")) #{} 匹配指定次数 ['asdf'] print(re.findall("a[dfg]","adhfag")) #[] 选出一个 ['ad', 'ag'] print(re.findall("a|g","adhfag")) #| 或 ['a', 'a', 'g'] print(re.findall("www.(baidu|163).com","www.baidu.com") #优先显示() ['baidu'] print(re.findall("www.(?:baidu|163).com","www.baidu.com")) # ?:去除优先集 ['www.baidu.com'] print(re.findall("^a","abafa")) #^a匹配开头是a的 ['a'] print(re.findall("a$","dacda")) #a$匹配结尾是a的 ['a']
#大小写匹配的内容相反
print(re.findall("\d+","fg12hg42")) #\d匹配所有十进制数
print(re.findall("\D","fg12'.?"))
print(re.findall("\s.+","a  sd"))  #\s 匹配空格
print(re.findall("\S","  ;l.>$3#"))
print(re.findall("\w","fg12\n'"))  #\w 匹配所有字母数字
print(re.findall("\W","fg12\n'"))
print(re.findall(r"a\b","a#asd"))  #\b 匹配特殊字符空格
print(re.findall(r"d\\h","dfd\h"))#\ 可以将有意义的字符转为无意义将无意义的字符转为有意义

['12', '42']
['f', 'g', "'", '.', '?']
['  sd']
[';', 'l', '.', '>', '$', '3', '#']
['f', 'g', '1', '2']
['\n', "'"]
[]
['d\\h'}
print(re.search("s","ascsa")) #search匹配第一个返回一个对象
print(re.search("s","ascsa").group()) #从对象中取出用group()
print(re.match("a","asa")) #match匹配开头第一个返回一个对象,相当于^search
print(re.split("a","dfassadfa")) #split分割
print(re.sub("\d","A","14fgs48h",2))#sub替换可设置替换数量
print(re.subn("\d","A","14fgs48h",2)) #返回一个元组显示替换结果和替换数量
a=re.finditer("\d","a47s56csa") #finfiter 将返回值封装到迭代器
print(next(a).group())
print(next(a).group())
b=re.search("(?P<name>[a-z]+(?P<age>\d+))","as45cf47jh18").group('age') #?P<name> 分组
print(b)

<re.Match object; span=(1, 2), match='s'>
s
<re.Match object; span=(0, 1), match='a'>
['df', 'ss', 'df', '']
AAfgs48h
('AAfgs48h', 2)
4
7

45

posted on 2018-08-21 18:23  我取  阅读(145)  评论(0)    收藏  举报

导航