注意html
1 import random 2 3 print(random.random()) #用於隨機生成一個0到1隨機浮點數 4 print(random.randint(1,3)) #隨機(a,b) 之間的值 1<=n<=3 5 print(random.randrange(1,3)) #隨機(a,b) 之間的值,不包含3 1<=n<3 6 print(random.choice('hello')) #隨機取('hello')值 單個字符,可傳入元祖,列表,字符串 print(random.choice([1,2,3])) 7 print(random.sample('hello',3))#隨機取('hello',3) hello的前3位的單個字符 8 print(random.uniform(1,10)) #用於生成制定範圍值的一個隨機浮點數 9 10 #隨機密碼-數字&字母組合 11 checkcode = '' 12 for i in range(4): #循環 0,1,2,3 13 current = random.randrange(0,4) # 隨機0,1,2,3 14 print(current,i) 15 if current == i: 16 tmp = chr(random.randint(65,90)) #ASCII碼 65-90表明A-Z 17 else: 18 tmp = random.randint(0,9) 19 checkcode +=str(tmp) 20 print(checkcode)
1 import os 2 3 print(os.getcwd())#獲取當前工做目錄 4 os.chdir("/home") #改變當前路徑,至關於cd 5 os.chdir(r'C:\Users') 6 print(os.getcwd()) 7 print(os.curdir)#返回當前目錄「.」 8 print(os.pardir)#返回上一級目錄「..」當前目錄的父目錄 9 os.makedirs(r'/Users/chenjianguo/Desktop/charm/python/day05/a/b/c')#建立多層次遞歸目錄 10 os.removedirs(r'/Users/chenjianguo/Desktop/charm/python/day05/a/b/c') #若目錄爲空,則刪除,並遞歸到上一級目錄,以此類推(必須是存在目錄) 11 os.mkdir(r'/Users/chenjianguo/Desktop/charm/python/day05/dirmame') #建立目錄,不可遞歸 12 os.rmdir(r'/Users/chenjianguo/Desktop/charm/python/day05/dirmame') #刪除單級空目錄 13 print(os.listdir(r'/Users')) #列出指定目錄下全部文件河子目錄,包括隱藏文件,並以列表方式打印 14 os.remove(r'123.py') #刪除文件 15 print(os.stat(r'dirmame')) #獲取文件/目錄-的詳細信息 16 print(os.sep) #輸出路徑分隔符 / 17 print(os.linesep) #輸出換行分隔符 18 print(os.pathsep) #輸出冒號 : 19 os.system('ls') #執行shell命令 20 print(os.environ) #獲取系統環境變量 21 print(os.path.abspath('dirmame'))#:絕對路徑 22 print(os.path.split(r'/Users/chenjianguo/Desktop/charm/python/day05/package_test/123.py'))#: 把path分爲目錄和文件兩個部分,以列表返回 23 print(os.path.abspath(__file__)) #返回當前文件的絕對路徑 24 print(os.path.dirname(os.path.abspath(__file__))) #返回**的目錄 25 print(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) #屢次執行返回上一級目錄 26 print(os.path.basename(r'123.py')) #獲取文件名 27 print(os.path.exists(r'123.py')) #判斷文件是否存在,存在返回True 不存在返回False 28 print(os.path.isabs(r'/')) #若是是絕對路徑返回True 不是返回False 29 print(os.path.isfile('123.py')) #判斷是不是文件是返回True 不是發揮False 30 print(os.path.isdir('dirmame')) #判斷是不是目錄是返回True 不是發揮False 31 print(os.path.join('dirmame','123'))#: 經常使用來連接路徑 32 os.path.altsep#: 根目錄 33 os.path.curdir#:當前目錄 34 os.path.pardir#:父目錄 35 print(os.path.getatime('dirmame')) #獲取指定文件/目錄的最後存取時間 36 print(os.path.getmtime('dirmame')) #獲取指定文件/目錄的最後修改時間
1 import sys 2 # print(sys.exit()) #退出程序,正常退出時exit(0) 3 print(sys.version) #獲取Python解釋程序的版本信息 4 # print(sys.maxint) #最大的Int值 5 print(sys.path) #返回模塊的搜索路徑,初始化時使用PYTHONPATH環境變量的值 6 print(sys.platform) #返回操做系統平臺名稱 7 print(sys.stdout.write('please:'))#寫進度條 8 val = sys.stdin.readline()[:-1] #獲取輸入值 9 print(val)
time和datetime模塊主要用於操做時間python
時間有三種表示方式,一種是時間戳、一種是格式化時間、一種是時間元組正則表達式
1 import datetime, time 2 3 print(time.timezone) # 和標準時間相差的時間,單位是s 4 print(time.time()) # 獲取當前時間戳 5 print(time.sleep(1)) # 休息幾s 6 print(time.gmtime()) # 把時間戳轉換成時間元組,若是不傳的話,默認取標準時區的時間戳 7 print(time.localtime()) # 把時間戳轉換成時間元組,若是不傳的話,默認取當前時區的時間戳 8 print(time.mktime(time.localtime())) # 把時間元組轉換成時間戳 9 print(time.strftime("%y%m%d %H%M%S")) # 將時間元組轉換成格式化輸出的字符串 10 print(time.strptime("20160204 191919", "%Y%m%d %H%M%S")) # 將格式化的時間轉換成時間元組 11 print(time.struct_time) # 時間元組 12 print(time.asctime()) # 時間元轉換成格式化時間 13 print(time.ctime()) # 時間戳轉換成格式化時間 14 print(datetime.datetime.now()) # 固然時間格式化輸出 15 print(datetime.datetime.now() + datetime.timedelta(3)) # 3天后的時間 16 print(datetime.datetime.now() + datetime.timedelta(-3)) # 3天前的時間
1 import zipfile 2 # 壓縮 3 z = zipfile.ZipFile('laxi.zip', 'w') 4 z.write('a.log') 5 z.write('data.data') 6 z.close() 7 8 # 解壓 9 z = zipfile.ZipFile('laxi.zip', 'r') 10 z.extractall() 11 z.close() 12 13 import tarfile 14 15 # 壓縮 16 tar = tarfile.open('qunawang-test.zip','w') #壓縮包命名 17 tar.add('/Users/chenjianguo/Desktop/charm/python/qunawang', arcname='qunawang1222.zip') #壓縮文件目錄,arcname->解壓後顯示的名字 18 tar.add('/Users/chenjianguo/Desktop/charm/python/test/qunawang-test.zip', arcname='cmdb1.zip') 19 tar.close() 20 21 # # # 解壓 /Users/chenjianguo/Desktop/charm/python/test/qunawang-test.zip 22 tar = tarfile.open('qunawang-test.zip','r') 23 tar.extractall() # 可設置解壓地址 24 tar.close()
1 import xlrd 2 3 # 打開excel:新建 deme.xls文件,不然會報錯 4 file = xlrd.open_workbook('dome.xls') 5 # 查看文件中包含sheet的名稱: 6 print(file.sheet_names()) 7 # 獲得第一個工做表,或者經過索引順序 或 工做表名稱 8 sheet = file.sheets()[0] 9 # print(sheet) 10 sheet = file.sheet_by_index(1) 11 # print(sheet) 12 sheet = file.sheet_by_name('工做表1') 13 print('sheet:',sheet) 14 # 獲取行數和列數 15 nrows = sheet.nrows 16 print('nrows:',nrows) 17 ncols = sheet.ncols 18 print('ncols:',ncols) 19 # 循環行,獲得索引的列表 20 for rownum in range(sheet.nrows): 21 print('rownum:',sheet.row_values(rownum)) 22 # 獲取整行和整列的值(數組) 23 #sheet.row_values(i) 24 #sheet.col_values(i) 25 # 單元格(索引獲取) 26 cell_A1 = sheet.cell(0, 0).value 27 print(cell_A1) 28 cell_C4 = sheet.cell(1, 3).value 29 print(cell_C4) 30 # 分別使用行列索引 31 cell_A1 = sheet.row(0)[0].value 32 print(cell_A1) 33 cell_A2 = sheet.col(1)[0].value 34 print(cell_A2)
1 # 導入xlwt 2 import xlwt 3 4 # 新建一個excel文件 5 file = xlwt.Workbook() # 注意這裏的Workbook首字母是大寫,無語吧 6 # 新建一個sheet 7 sheet = file.add_sheet('sheet_name',cell_overwrite_ok=True) 8 # 寫入數據sheet.write(行,列,value) 9 sheet.write(0, 0, 'test') 10 # 若是對一個單元格重複操做,會引起 11 #returns error: 12 # Exception: Attempt to overwrite cell: 13 # sheetname=u‘sheet 1‘ rowx=0 colx=0 14 # 因此在打開時加cell_overwrite_ok=True解決 15 # sheet = file.add_sheet('sheet name', cell_overwrite_ok=True) 16 # 保存文件 17 file.save('demo111.xls')
1 from xlrd import open_workbook 2 from xlutils.copy import copy 3 4 rb = open_workbook('demo111.xls') 5 # 經過sheet_by_index()獲取的sheet 6 rs = rb.sheet_by_index(0) 7 # 複製一個excel 8 wb = copy(rb) 9 # 經過獲取到新的excel裏面的sheet頁 10 ws = wb.get_sheet(0) 11 ws.write(1, 0, 'Lily') # 寫入excel,第一個值是行,第二個值是列 12 wb.save('szz_new.xls') # 保存新的excel,保存excel必須使用後綴名是.xls的,不是能是.xlsx的
常見文檔格式以下算法
1 [DEFAULT] 2 ServerAliveInterval = 45 3 Compression = yes 4 CompressionLevel = 9 5 ForwardX11 = yes 6 7 [bitbucket.org] 8 User = hg 9 10 [topsecret.server.com] 11 Port = 50022 12 ForwardX11 = no
新建example.ini 格式文件shell
1 import configparser 2 #生成一個 configparser對象 3 config = configparser.ConfigParser() 4 5 config['DEFAULT'] = {'ServerAliverInterval':'45', #節點-指定對象 --key valuer 6 'Compression':'yes', 7 'CompersionLevel':'9'} 8 config['bitbucket.org'] = {} #空節點 9 config['bitbucket.org']['User'] = 'hg' 10 11 config['topsecret.server.com'] = {} 12 topsecret = config['topsecret.server.com'] #賦值-方便操做 13 topsecret['Host Port'] = '50022' 14 topsecret['ForwardXll'] = 'no' 15 16 config['DEFAULT']['ForwardXll'] = 'yes' 17 #寫入文件 example.ini 18 with open('example.ini','w') as configfile: 19 config.write(configfile)
configparser 讀取編程
1 import configparser 2 3 config = configparser.ConfigParser() 4 config.read('example.ini') #讀取文件 5 6 print(config.defaults()) #讀取文件頭結點 7 print(config['bitbucket.org']['user']) #讀取結點下的內容['bitbucket.org']['user'] 8 print(config.sections()) #讀取結點
configparser 刪除-數據修改數組
1 import configparser 2 3 config = configparser.ConfigParser() 4 config.read('example.ini') 5 6 secs = config.sections() 7 print(secs) 8 options = config.options('topsecret.server.com') #讀取結點 9 print(options) 10 item = config.items('topsecret.server.com') #讀取結點內容 11 config.set('bitbucket.org','hg','111') #增長節點下的數據hg=111 12 config.write(open('i.cfg','w')) 13 14 #刪除bitbucket.org節點 15 sec = config.add_section('IPADD') #增長節點 16 # sec = config.has_section('IPADD') #刪除節點 17 # sec = config.remove_section('bitbucket.org') #刪除結點 18 config.remove_option('bitbucket.org','user') #刪除結點下的數user數據 19 config.write(open('example.cfg','w'))
hashlib模塊,主要用於加密相關的操做,在python3的版本里,代替了md5和sha模塊,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法dom
1 import hashlib 2 # ######## md5 ######## 3 4 hash = hashlib.md5() 5 hash.update(b'admin') 6 print(hash.hexdigest()) 7 print(hash.digest()) # 2進制格式hash 8 print(len(hash.hexdigest())) # 16進制格式hash 9 10 # ######## sha1 ######## 11 12 hash = hashlib.sha1() 13 hash.update(b'admin') 14 print(hash.hexdigest()) # 16進制格式顯示 15 16 # ######## sha256 ######## 17 18 hash = hashlib.sha256() 19 hash.update(b'admin') 20 print(hash.hexdigest()) 21 22 # ######## sha384 ######## 23 24 hash = hashlib.sha384() 25 hash.update(b'admin') 26 print(hash.hexdigest()) 27 28 # ######## sha512 ######## 29 30 hash = hashlib.sha512() 31 hash.update(b'admin') 32 print(hash.hexdigest())
更多關於md5,sha1,sha256等介紹的文章看這裏https://www.tbs-certificates.co.uk/FAQ/en/sha256.html編程語言
1 '.' 默認匹配除\n以外的任意一個字符,若指定flag DOTALL,則匹配任意字符,包括換行 2 '^' 匹配字符開頭,若指定flags MULTILINE,這種也能夠匹配上(r"^a","\nabc\neee",flags=re.MULTILINE) 3 '$' 匹配字符結尾,或e.search("foo$","bfoo\nsdfsf",flags=re.MULTILINE).group()也能夠 4 '*' 匹配*號前的字符0次或屢次,re.findall("ab*","cabb3abcbbac") 結果爲['abb', 'ab', 'a'] 5 '+' 匹配前一個字符1次或屢次,re.findall("ab+","ab+cd+abb+bba") 結果['ab', 'abb'] 6 '?' 匹配前一個字符1次或0次 7 '{m}' 匹配前一個字符m次 8 '{n,m}' 匹配前一個字符n到m次,re.findall("ab{1,3}","abb abc abbcbbb") 結果'abb', 'ab', 'abb'] 9 '|' 匹配|左或|右的字符,re.search("abc|ABC","ABCBabcCD").group() 結果'ABC' 10 '(...)' 分組匹配,re.search("(abc){2}a(123|456)c", "abcabca456c").group() 結果 abcabca456c 11 12 13 '\A' 只從字符開頭匹配,re.search("\Aabc","alexabc") 是匹配不到的 14 '\Z' 匹配字符結尾,同$ 15 '\d' 匹配數字0-9 16 '\D' 匹配非數字 17 '\w' 匹配[A-Za-z0-9] 18 '\W' 匹配非[A-Za-z0-9] 19 ‘\s' 匹配空白字符、\t、\n、\r , re.search("\s+","ab\tc1\n3").group() 結果 '\t' 20 21 '(?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'}
最經常使用的匹配語法函數
1 re.match 從頭開始匹配 2 re.search 匹配包含 3 re.findall 把全部匹配到的字符放到以列表中的元素返回 4 re.splitall 以匹配到的字符當作列表分隔符 5 re.sub 匹配字符並替換
1 import re 2 res = re.match('^chen\d+','chen123jianguo') #^匹配,\d匹配數字,+出現一次或屢次 match從頭讀取 3 print(res.group()) 4 res = re.match('^.+\d','chen123jianguo') #.匹配一個字符 5 print(res.group()) 6 res = re.search('j.+o','chen123jianguo321') #search 讀取整個文件 從J開的讀取 .+匹配全部字符--到o 結束 7 print(res.group()) 8 res = re.search('j[a-zA-Z]+\d+[A-Za-z]+','chen123jianguo321Jianguo') #[a-z] a到z出現的字符 9 print(res.group()) 10 res = re.search('c?','cchen123jianguo321Jianguo') # ?匹配a出現1次或者0次 ccl ?--> chenccl&cchenccl&cclhenccl =ccl&cc&ccl 11 print(res.group()) 12 res = re.search('[0-9]{3}','chen1jian2guo334aa') #{3} 匹配3個 334 {1,3} 1到3 13 print(res.group()) 14 res = re.findall('[0-9]{1,3}','chen1jian2guo334aa') #findall 查找所有['1', '2', '334'] 沒有group方法 只能在命令行執行 15 print(res.group()) 16 res = re.search('abc|ABC','abcABCchen1jian2guo334aa') # |->或 匹配管道符 | 倆邊 findall 查找所有 17 print(res.group()) 18 res = re.search('(abc){2}','alexabcabccc') #()組合匹配 (abc)匹配abc 倆次{2} 19 print(res.group()) 20 res = re.search('(abc){2}\|','alexabcabc|cc') # \ -->轉譯 不把|看作管道符操做abcabc| 21 print(res.group()) 22 res = re.search('(abc){2}(\|\|=){2}','alexabcabc||=||=cc') # \ -->轉譯 雙||都須要轉譯 23 print(res.group()) 24 res = re.search('\D+','2312# @#@312') # \D 匹配非數字的 特殊字符 \w匹配[A-Za-z0-9] \W匹配非[A-Za-z0-9] 25 print(res.group()) 26 res = re.search('\s+','2312# \r\n@#@312') # 匹配空白字符、\t、\n、\r 命令行展現效果 27 print(res.group()) 28 res = re.search("(?P<province>[0-9]{4})(?P<city>[0-9]{2})(?P<birthday>[0-9]{4})","371481199306143242") 29 print(res.groupdict()) #res.groupdict("city") {'province': '3714', 'city': '81', 'birthday': '1993'} 30 res = re.split('[0-9]','abc1ef33ef11') #['abc', 'ef', '', 'ef', '', ''] split分割-命令行執行 31 print(res) 32 res = re.sub('[0-9]+','|','abc1ef33ef11') #sub 替換 'abc|ef|ef|' 命令行執行 33 print(res) 34 res = re.sub('[0-9]+','|','abc1ef33ef11',count=2) #sub 替換 前2個 'abc|ef|ef11' 命令行執行 35 print(res) 36 res = re.search('[a-z]+','abcA',flags=re.I) #re.I忽略大小寫 37 print(res.group()) 38 res = re.search(r'.+','abcA\nbcd\nfffd',flags=re.S) #re.M 點任意匹配模式,改變'.'的行爲 39 print(res.group()) 40 print(res)