您好,登錄后才能下訂單哦!
1.模塊和包
● 模塊定義:用來(lái)從邏輯上組織python代碼(變量,函數(shù),類(lèi),邏輯:實(shí)現(xiàn)一個(gè)功能),本質(zhì)就是.py結(jié)尾的python文件(文件名test.py,對(duì)應(yīng)的模塊名:test)
● 包定義:用來(lái)從邏輯上組件模塊的,本質(zhì)就是一個(gè)目錄(必須帶有一個(gè)__init__.py文件)
2.模塊和包導(dǎo)入本質(zhì)
● 導(dǎo)入模塊的本質(zhì)就是把python文件解釋一遍
● 導(dǎo)入包的本質(zhì)就是執(zhí)行該包下的__init__.py文件;如果要導(dǎo)入包下面的模塊:需要先導(dǎo)入包,然后包下的__init__.py文件中再導(dǎo)入該包下的模塊
3.導(dǎo)入模塊
import module_name #導(dǎo)入一個(gè)模塊 import module1_name,module2_name #導(dǎo)入多個(gè)模塊 module_name.logger() #執(zhí)行模塊里的函數(shù) modele_name.var #調(diào)用模塊里的變量 from module_name import method1 method2 from module_name import * #導(dǎo)入模塊的所有方法,不建議用 logger() #直接調(diào)用模塊里的方法 ,不用模塊名加點(diǎn) from module_name import logger as logger_feng #導(dǎo)入將模塊里的logger方法并改名
4.導(dǎo)入不同包(目錄)下的python模塊
import os,sys #print(__file__) #動(dòng)態(tài)獲取當(dāng)前文件相當(dāng)路徑 #print(os.path.abspath(__file__)) #動(dòng)態(tài)獲取當(dāng)前文件絕對(duì)路徑 #print(os.path.dirname(os.path.abspath(__file__)) #動(dòng)態(tài)獲取當(dāng)前文件父目錄路徑 PATH=os.path.dirname(os.path.dirname(os.path.abspath(__file__))) #這里獲取到的是ATM這個(gè)目錄的絕對(duì)路徑 sys.path.append(PATH) #將獲取到的絕對(duì)路徑加到環(huán)境變量 from core import main #從core目錄下import main main.name("fengxiaoli") #調(diào)用main里的函數(shù)name
5.time模塊
python中通常時(shí)間的表示
●時(shí)間戳
●格式化的時(shí)間字符串
●元組時(shí)間
●時(shí)間戳-->元組時(shí)間
>>> x = time.time() #獲取當(dāng)前時(shí)間戳 >>> time.gmtime(x) #將當(dāng)前時(shí)間戳轉(zhuǎn)化為utc時(shí)間元組 time.struct_time(tm_year=2018, tm_mon=2, tm_mday=4, tm_hour=10, tm_min=4, tm_sec =22, tm_wday=6, tm_yday=35, tm_isdst=0) >>> time.localtime(x) #將當(dāng)前時(shí)間戳轉(zhuǎn)化為本地時(shí)間(utc+8)元組 time.struct_time(tm_year=2018, tm_mon=2, tm_mday=4, tm_hour=18, tm_min=4, tm_sec =22, tm_wday=6, tm_yday=35, tm_isdst=0) >>> x1 = time.localtime(x) >>> x1.tm_year #獲取元組時(shí)間 2018 >>> x1.tm_mon 2
●元組時(shí)間-->時(shí)間戳
>>> x1 time.struct_time(tm_year=2018, tm_mon=2, tm_mday=4, tm_hour=18, tm_min=4, tm_sec =22, tm_wday=6, tm_yday=35, tm_isdst=0) >>> time.mktime(x1) 1517738662.0
●元組時(shí)間-->自定義格式化字符串時(shí)間
>>> x1 time.struct_time(tm_year=2018, tm_mon=2, tm_mday=4, tm_hour=18, tm_min=4, tm_sec =22, tm_wday=6, tm_yday=35, tm_isdst=0) >>> time.strftime("%Y-%m-%d %H:%M:%S",x1) '2018-02-04 18:04:22'
●自定義格式化字符串時(shí)間-->元組時(shí)間
>>> help(time.strptime) #查看strptime幫助 strptime(...) strptime(string, format) -> struct_time >>> time.strptime("2018-02-04 18:04:22","%Y-%m-%d %H:%M:%S") time.struct_time(tm_year=2018, tm_mon=2, tm_mday=4, tm_hour=18, tm_min=4, tm_sec =22, tm_wday=6, tm_yday=35, tm_isdst=-1)
●時(shí)間戳-->格式化字符串
>>> x 1517738662.821426 >>> time.ctime(x) 'Sun Feb 4 18:04:22 2018'
●元組-->格式化字符串
>>> x1 time.struct_time(tm_year=2018, tm_mon=2, tm_mday=4, tm_hour=18, tm_min=4, tm_sec =22, tm_wday=6, tm_yday=35, tm_isdst=0) >>> time.asctime(x1) 'Sun Feb 4 18:04:22 2018'
●time模塊其他方法
>>> import time >>> time.timezone #標(biāo)準(zhǔn)時(shí)間(utc)和本地時(shí)間(utc+8)相差多少秒 -28800 #這里是本地時(shí)間比標(biāo)準(zhǔn)時(shí)間早28800秒,也就是早8小時(shí),也就是中國(guó)為utc+8時(shí)區(qū) >>> 28800/3600 8.0 >>> time.altzone #標(biāo)準(zhǔn)時(shí)間和夏令時(shí)相差多少 -32400 >>> time.daylight #判斷是否是夏令時(shí) 0 >>> time.clock() #當(dāng)運(yùn)行time.clock()開(kāi)始,返回一個(gè)時(shí)間 1.0263524545646598e-05 >>> time.clock() 2.1054247858986015 >>> time.clock() 3.8245134020248224 >>> time.clock() 6.940938975648932 >>> time.clock() 15.189280774964526 >>> time.sleep(2) #程序睡2秒 >>> time.sleep(1) >>> time.time() #返回一個(gè)時(shí)間戳,該時(shí)間戳是從1970到現(xiàn)在多少秒 1517737506.325569 >>> x=time.time() >>> x/3600/24/365 48.12714301673213 >>> 1970+48 2018
6.datetime模塊
>>> import datetime >>> print(datetime.datetime.now()) #獲取當(dāng)前時(shí)間 2018-02-04 18:37:25.319604 >>> print(datetime.date.fromtimestamp(time.time())) #將時(shí)間戳改為格式化字符串 2018-02-04 >>> print(datetime.datetime.now() + datetime.timedelta(3)) #當(dāng)前時(shí)間+3天 2018-02-07 18:40:59.8228 >>> print(datetime.datetime.now() + datetime.timedelta(-3)) #當(dāng)前時(shí)間-3天 2018-02-01 18:41:06.402249 >>> print(datetime.datetime.now() + datetime.timedelta(hours=3)) #當(dāng)前時(shí)間加3小時(shí) 2018-02-04 21:41:29.079546 >>> print(datetime.datetime.now() + datetime.timedelta(minutes= -3)) #當(dāng)前時(shí)間減3分鐘 2018-02-04 18:38:40.102177 >>> c_time = datetime.datetime.now() >>> print(c_time.replace(minute=3,hour=2)) #更改時(shí)間 2018-02-04 02:03:47.909055
7.random模塊
#隨機(jī)浮點(diǎn)數(shù) >>> import random >>> random.random() #生成一個(gè)0-1的隨機(jī)浮點(diǎn)數(shù) 0.7370268365256588 >>> random.uniform(1,3) #隨機(jī)打印1-3直接的浮點(diǎn)數(shù) 2.907184937455974 >>> random.uniform(1,5) 3.1441005290312556 #隨機(jī)整數(shù) >>> random.randint(1,5) #生成一個(gè)1-5的隨機(jī)整數(shù),包括1和5 5 >>> random.randint(1,5) 2 #隨機(jī)選取0-100間的偶數(shù) >>> random.randrange(0,101,2) 6 >>> random.randrange(1,5) #生成一個(gè)1-4的隨機(jī)整數(shù),不包括5 3 >>> random.randrange(1,5) 4 #隨機(jī)字符 >>> random.choice("hello") #隨機(jī)打印一個(gè)前面對(duì)象的元素 'o' >>> random.choice([1,2,3,4]) 2 #多個(gè)字符選取特定數(shù)量字符 >>> random.sample("hello",2) #指定個(gè)數(shù)隨機(jī)打印前面對(duì)象元素 ['l', 'o'] >>> random.sample([1,2,3,4],2) [3, 4] #洗牌 >>> x = [1,2,3,4,5] >>> random.shuffle(x) #將列表隨機(jī)打亂 >>> print(x) [3, 1, 2, 4, 5] #驗(yàn)證碼,生成4位隨機(jī)驗(yàn)證碼 import random n = 4 checkcode = "" for i in range(n): current = random.randrange(0,n) if i < current: tmp = random.randint(0,9) elif i==current: tmp = chr(random.randrange(97, 122)) else: tmp = chr(random.randrange(65,90)) checkcode+=str(tmp) print(checkcode)
8.os模塊
#提供對(duì)操作系統(tǒng)進(jìn)行調(diào)用的接口 #對(duì)目錄操作 os.getcwd() #獲取當(dāng)前工作目錄,即當(dāng)前python腳本工作的目錄路徑 os.chdir("dirname") #改變當(dāng)前腳本工作目錄;相當(dāng)于shell下cd os.curdir #返回當(dāng)前目錄: ('.') os.pardir #獲取當(dāng)前目錄的父目錄字符串名:('..') os.makedirs('dirname1/dirname2') #可生成多層遞歸目錄 os.removedirs('dirname1') #若目錄為空,則刪除,并遞歸到上一級(jí)目錄,如若也為空,則刪除,依此類(lèi)推 os.mkdir('dirname') #生成單級(jí)目錄;相當(dāng)于shell中mkdir dirname os.rmdir('dirname') #刪除單級(jí)空目錄,若目錄不為空則無(wú)法刪除,報(bào)錯(cuò);相當(dāng)于shell中rmdir dirname os.listdir('dirname') #列出指定目錄下的所有文件和子目錄,包括隱藏文件,并以列表方式打印 #對(duì)文件操作 os.remove() #刪除一個(gè)文件 os.rename("oldname","newname") #重命名文件/目錄 os.stat('path/filename') #獲取文件/目錄信息 os.sep #輸出操作系統(tǒng)特定的路徑分隔符,win下為"\\",Linux下為"/" os.linesep #輸出當(dāng)前平臺(tái)使用的行終止符,win下為"\r\n",Linux下為"\n" os.pathsep #輸出用于分割文件路徑的字符串 os.name #輸出字符串指示當(dāng)前使用平臺(tái)。win->'nt'; Linux->'posix' os.system("bash command") #運(yùn)行shell命令,直接顯示 os.environ #獲取系統(tǒng)環(huán)境變量 os.path.abspath(path) #返回path規(guī)范化的絕對(duì)路徑 os.path.split(path) #將path分割成目錄和文件名二元組返回 os.path.dirname(path) #返回path的目錄。其實(shí)就是os.path.split(path)的第一個(gè)元素 os.path.basename(path) #返回path最后的文件名。如何path以/或\結(jié)尾,那么就會(huì)返回空值。即os.path.split(path)的第二個(gè)元素 os.path.exists(path) #如果path存在,返回True;如果path不存在,返回False os.path.isabs(path) #如果path是絕對(duì)路徑,返回True os.path.isfile(path) #如果path是一個(gè)存在的文件,返回True。否則返回False os.path.isdir(path) #如果path是一個(gè)存在的目錄,則返回True。否則返回False os.path.join(path2[, path3[, ...]]) #將多個(gè)路徑組合后返回,第一個(gè)絕對(duì)路徑之前的參數(shù)將被忽略 os.path.getatime(path) #返回path所指向的文件或者目錄的最后存取時(shí)間 os.path.getmtime(path) #返回path所指向的文件或者目錄的最后修改時(shí)
9.sys模塊
import sys print(sys.argv) #以list格式返回該腳本參數(shù),返回的第一個(gè)參數(shù)是執(zhí)行該腳本相當(dāng)路徑 如:python test.py 1 2 3 ['test.py','1','2','3'] sys.exit(n) #退出程序,正常退出時(shí)exit(0) sys.version #獲取python版本 sys.path #返回模塊搜索路徑,初始化時(shí)使用pythonpath環(huán)境變量的值 sys.platform #返回操作系統(tǒng)平臺(tái) sys.stdout.write("--") #標(biāo)準(zhǔn)輸出到屏幕
10.shutil模塊
#高級(jí)的 文件、文件夾、壓縮包 處理模塊 import shutil f1 = open("file1","r",encoding="utf-8") f2 = open("file2","w",encoding="utf-8") shutil.copyfileobj(f1,f2) #復(fù)制文件1內(nèi)容到文件2,需要自己打開(kāi)關(guān)閉文件 shutil.copyfile("file1","file2") #復(fù)制文件1內(nèi)容到文件2,不需要自己打開(kāi)關(guān)閉文件 shutil.copymode("file1","file2") #僅拷貝權(quán)限,內(nèi)容,組,用戶(hù)均不變 shutil.copystat("file1","file2") #拷貝狀態(tài)的信息,包括 mode bits,atime,mtime,flags shutil.copy("file1","file2") #拷貝文件和權(quán)限 shutil.copy2("file1","file2") #拷貝文件和狀態(tài)信息 shutil.copytree("srcdir","dstdir") #遞歸的拷貝文件 shutil.rmtree("dstdir") #遞歸刪除文件 shutil.move("src","dst") #遞歸的去移動(dòng)文件 shutil.make_archive("base_name", format,...) #創(chuàng)建壓縮包并返回文件路徑,例如:zip、tar base_name:壓縮包的文件名,也可以是壓縮包的路徑。只是文件名時(shí),則保存至當(dāng)前目錄,否則保存至指定路徑。 format:壓縮包種類(lèi),“zip”, “tar”, “bztar”,“gztar” root_dir:要壓縮的文件夾路徑(默認(rèn)當(dāng)前目錄) owner:用戶(hù),默認(rèn)當(dāng)前用戶(hù) group:組,默認(rèn)當(dāng)前組 logger:用于記錄日志,通常是logging.Logger對(duì)象
11.zipfile模塊
import zipfile impot os #壓縮單個(gè)文件 import zipfileimport oswith zipfile.ZipFile('test.zip', 'w') as z: z.write('log.txt') #壓縮某個(gè)目錄下所有文件 def compress_file(zipfilename, dirname): # zipfilename是壓縮包名字,dirname是要打包的目錄/文件 if os.path.isfile(dirname): with zipfile.ZipFile(zipfilename, 'w') as z: z.write(dirname) else: with zipfile.ZipFile(zipfilename, 'w') as z: for root, dirs, files in os.walk(dirname): #這里用到了os.walk遍歷目錄下的文件,詳情參考o(jì)s的walk方法 for single_file in files: if single_file != zipfilename: filepath = os.path.join(root, single_file) z.write(filepath) compress_file('a.zip', '.') #執(zhí)行函數(shù) #添加文件到已有的zip包中 def addfile(zipfilename, dirname): if os.path.isfile(dirname): with zipfile.ZipFile(zipfilename, 'a') as z: z.write(dirname) else: with zipfile.ZipFile(zipfilename, 'a') as z: for root, dirs, files in os.walk(dirname): for single_file in files: if single_file != zipfilename: filepath = os.path.join(root, single_file) z.write(filepath) addfile('a.zip', 'test.txt') #查看壓縮包中的文件 def viewfile(zipfilename): with zipfile.ZipFile(zipfilename, 'r') as z: print(z.namelist()) viewfile('a.zip') #解壓 with zipfile.ZipFile('test.zip', 'r') as z: print(z.namelist()) # 查看壓縮包中的文件列表 # print(z.read(z.namelist()[0])) # 讀出來(lái)壓縮包中的第一個(gè)文件的內(nèi)容打印到屏幕,也可保存到文件中 z.extractall('C:\\Users\\Administrator\\PycharmProjects\\aaa') # 解壓,可設(shè)置解壓路徑 # z.extract('log.txt') # 解壓,可選擇解壓壓縮包中的某個(gè)文件 #z.extractall() # 解壓全部
12.tarfile模塊
import tarfile import os #壓縮文件 with tarfile.open('a.tar', 'w') as tar: tar.add('log.log', arcname='log.log') tar.add('test.txt', arcname='test.txt') #解壓文件 with tarfile.open('a.tar', 'r') as tar: print(tar.getmembers()) # 查看壓縮包內(nèi)文件成員 # tar.extract('test.txt') # 可選擇解壓某個(gè)文件 # tar.extractall('ccc') # 可設(shè)置解壓路徑 tar.extractall() # 解壓全部 #壓縮某個(gè)目錄下所有文件 def compress_file(tarfilename, dirname): # tarfilename是壓縮包名字,dirname是要打包的目錄 if os.path.isfile(dirname): with tarfile.open(tarfilename, 'w') as tar: tar.add(dirname) else: with tarfile.open(tarfilename, 'w') as tar: for root, dirs, files in os.walk(dirname): for single_file in files: # if single_file != tarfilename: filepath = os.path.join(root, single_file) tar.add(filepath) compress_file('test.tar', 'test.txt') compress_file('t.tar', '.') #添加文件到已有的tar包中 def addfile(tarfilename, dirname): # tarfilename是壓縮包名字,dirname是要打包的目錄 if os.path.isfile(dirname): with tarfile.open(tarfilename, 'a') as tar: tar.add(dirname) else: with tarfile.open(tarfilename, 'a') as tar: for root, dirs, files in os.walk(dirname): for single_file in files: # if single_file != tarfilename: filepath = os.path.join(root, single_file) tar.add(filepath) addfile('t.tar', 'ttt.txt') addfile('t.tar', 'ttt')
13.xml模塊
import xml.etree.ElementTree as ET #導(dǎo)入xml模塊并取別名 tree = ET.parse("xml_test.xml") #找到xml文件內(nèi)存地址 root = tree.getroot() #找到xml文件根內(nèi)存地址 print(root.tag) #打印xml文件根標(biāo)簽 # 遍歷xml文檔 for child in root: print(child.tag, child.attrib) for i in child: print(i.tag, i.text,i.attrib) # 只遍歷year 節(jié)點(diǎn) for node in root.iter('year'): print(node.tag, node.text) #修改和刪除xml文檔內(nèi)容 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") tree.write("xmltest.xml") # 刪除node for country in root.findall('country'): rank = int(country.find('rank').text) if rank > 50: root.remove(country) tree.write('output.xml') #自己創(chuàng)建xml文件 import xml.etree.ElementTree as ET new_xml = ET.Element("namelist") name = ET.SubElement(new_xml, "name", attrib={"enrolled": "yes"}) age = ET.SubElement(name, "age", attrib={"checked": "no"}) sex = ET.SubElement(name, "sex") sex.text = '33' name2 = ET.SubElement(new_xml, "name", attrib={"enrolled": "no"}) age = ET.SubElement(name2, "age") age.text = '19' et = ET.ElementTree(new_xml) # 生成文檔對(duì)象 et.write("test.xml", encoding="utf-8", xml_declaration=True) ET.dump(new_xml) # 打印生成的格式
14.configparser模塊
#將字符寫(xiě)為配置文件的形式 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) #讀configparser文件 import configparser conf =configparser.ConfigParser() conf.read("example.ini") # print(conf.defaults()) # print(conf["bitbucket.org"]["user"]) # #print(conf.sections()) for i in conf["topsecret.server.com"]: print(i) #刪除 import configparser conf =configparser.ConfigParser() conf.read("example.ini") sec=conf.remove_section("bitbucket.org") conf.write(open("example.cfg","w")) #改寫(xiě) import configparser conf =configparser.ConfigParser() conf.read("example.ini") sec=conf.remove_section("bitbucket.org") sec=conf.add_section("fengxiaoli.org") sec=conf.set("fengxiaoli.org","k1","111") conf.write(open("example.cfg","w"))
14.re模塊
# re.match 從頭開(kāi)始匹配 ,返回一個(gè)
# re.search 匹配包含,返回一個(gè)
# re.findall 把所有匹配到的字符放到以列表中的元素返回,返回所有
# re.splitall 以匹配到的字符當(dāng)做列表分隔符
# re.sub 匹配字符并替換
import re #match方法 c="chen234feng3252cxasfgj54gvf" res1=re.match("chen",c) res2=re.match("^chen\d+",c) res3=re.match(".+",c) #res4=re.match("cx",c) #匹配不到cx,因?yàn)閞e.match只能從頭開(kāi)始匹配 print(res1.group()) print(res2.group()) print(res3.group()) #print(res4.group()) #search方法 c="chen234fengdfasfcx3252cxasfgj54gvf" res1=re.search("cx",c) res2=re.search("feng.*cx",c) res3=re.search("^chen.+cx",c) res4=re.search("feng[a-z]+cx",c) res5=re.search("[0-9]{3}",c) #匹配連續(xù)出現(xiàn)3次數(shù)字的字符 res6=re.search("[0-9]{1,3}",c) #匹配連續(xù)出現(xiàn)數(shù)字,1次到3次的字符,re.search只能返回一個(gè) res7=re.search("(abc){2}","fengabcabcffcxabc") #將abc分組,匹配連續(xù)出現(xiàn)兩次的abc print(res1.group()) print(res2.group()) print(res3.group()) print(res4.group()) print(res5.group()) print(res6.group()) print(res7.group()) #分組匹配 '(?P<name>...)' res10=re.search("(?P<id>[0-9]+)(?P<name>[a-zA-Z]{4})",c).groupdict() print(res10) #輸出 {'id': '234', 'name': 'feng'} res11=re.search("(?P<province>[0-9]{4})(?P<city>[0-9]{2})(?P<birthday>[0-9]{4})", "371481199306143242").groupdict() #結(jié)果 print(res11) #{'province': '3714', 'city': '81', 'birthday': '1993'} #findall方法 c="c1hen234fengdfas1fcx3252cxasfgj54gvf" res1=re.findall("cx",c) res2=re.findall("feng|cx",c) res6=re.findall("[0-9]{1,3}",c) print(res1) print(res2) print(res6) #split方法 res=re.split("[0-9]","dsf34dsf46kjl6") #按指定字符分割 res1=re.split(":","dsf:34ds:f46kjl6") print(res) print(res1) #sub方法 res=re.sub("[0-9]+","AAA","afd454dffb56756sdg11feng") #將匹配的字符替換為指定字符 res1=re.sub("[0-9]+","AAA","afd454dffb56756sdg11feng",count=2) #指定替換的次數(shù) print(res) print(res1) 注: # re.I(re.IGNORECASE): 忽略大小寫(xiě)(括號(hào)內(nèi)是完整寫(xiě)法,下同) # M(MULTILINE): 多行模式,改變'^'和'$'的行為 # S(DOTALL): 點(diǎn)任意匹配模式,改變'.'的行為 #res1=re.search("fengxiaoli","\nFengXiaoLi123Cx456\nKdf564",flags=re.I) #忽略大小寫(xiě) #res1=re.search("^Feng","\nFengXiaoLi123Cx456\nKdf564",flags=re.M) # res1=re.search("Cx.+564","\nFengXiaoLi123Cx456\nKdf564",flags=re.S) #默認(rèn)點(diǎn)不能匹配\n,加上re.S后可以 print(res1.group())
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。