Python學習——python的常用模塊

来源:http://www.cnblogs.com/huan-ge/archive/2017/05/10/6822817.html
-Advertisement-
Play Games

模塊:用一堆代碼實現了某個功能的代碼集合,模塊是不帶 .py 擴展的另外一個 Python 文件的文件名。 一、time & datetime模塊 二、random模塊 三、OS模塊 四、sys模塊 五、shutil模塊 六、XML處理模塊 七、configparser模塊 用於生成和修改常見配置文 ...


模塊:用一堆代碼實現了某個功能的代碼集合,模塊是不帶 .py 擴展的另外一個 Python 文件的文件名。

一、time & datetime模塊

 1 import time
 2 import datetime
 3 
 4 print(time.asctime())      # 返回時間格式:Sun May  7 21:46:15 2017
 5 print(time.time())         # 返回時間戳 ‘1494164954.6677325’
 6 print(time.gmtime())       # 返回本地時間 的struct time對象格式,time.struct_time(tm_year=2017, tm_mon=5, tm_mday=7, tm_hour=22, tm_min=4, tm_sec=53, tm_wday=6, tm_yday=127, tm_isdst=0)
 7 print(time.localtime())    # 返回本地時間 的struct time對象格式,time.struct_time(tm_year=2017, tm_mon=5, tm_mday=7, tm_hour=22, tm_min=4, tm_sec=53, tm_wday=6, tm_yday=127, tm_isdst=0)
 8 print(time.gmtime(time.time()-800000))   # 返回utc時間的struc時間對象格式
 9 print(time.asctime(time.localtime()))    # 返回時間格式Sun May  7 22:15:09 2017
10 print(time.ctime())                      # 返回時間格式Sun May  7 22:15:09 2017
11 print(time.strftime('%Y-%m-%d'))         #預設當前時間 2017-05-07
12 print(time.strftime('%Y-%m-%d',time.localtime())) #預設當前時間 2017-05-07
13 
14 string_struct = time.strptime("2016/05/22","%Y/%m/%d") # 將日期字元串 轉成 struct時間對象格式
15 print(string_struct)                     # 返回struct time對象格式 time.struct_time(tm_year=2016, tm_mon=5, tm_mday=22, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=6, tm_yday=143, tm_isdst=-1)
16 
17 # 將日期字元串轉成時間戳
18 struct_stamp = time.mktime(string_struct) # 將struct time時間對象轉成時間戳
19 print(struct_stamp)                         # 返回時間戳 ‘1463846400.0’
20 
21 # 將時間戳轉為字元串格式
22 print(time.gmtime(time.time()-86640))         # 將utc時間戳轉換成struct_time格式
23 print(time.strftime("%Y-%m-%d %H:%M:%S",time.gmtime()) ) # 將utc struct_time格式轉成指定的字元串格式
24 
25 
26 # 時間加減
27 print(datetime.datetime.now())           # 返回當前時間 2017-05-07 22:36:45.179732
28 print(datetime.date.fromtimestamp(time.time()))  # 時間戳直接轉換成日期格式 2017-05-07
29 print(datetime.datetime.now() + datetime.timedelta(3))    # 返回時間在當前日期上 +3 天
30 print(datetime.datetime.now() + datetime.timedelta(-3))    # 返回時間在當前日期上 -3 天
31 print(datetime.datetime.now() + datetime.timedelta(hours= 3)) # 返回時間在當前時間上 +3 小時
32 print(datetime.datetime.now() + datetime.timedelta(minutes= 30)) # 返回時間在當前時間上 +30 分鐘
33 
34 c_time  = datetime.datetime.now()
35 print(c_time)                          # 當前時間為 2017-05-07 22:52:44.016732
36 print(c_time.replace(minute=3,hour=2)) # 時間替換 替換時間為‘2017-05-07 02:03:18.181732’
37 
38 print(datetime.timedelta)      # 表示時間間隔,即兩個時間點之間的長度
39 print (datetime.datetime.now() - datetime.timedelta(days=5))  # 返回時間在當前時間上 -5 天
40 
41 # python 日曆模塊
42 import calendar
43 
44 print(calendar.calendar(theyear= 2017))     # 返回2017年整年日曆
45 print(calendar.month(2017,5))               # 返回某年某月的日曆,返回類型為字元串類型
46 
47 calendar.setfirstweekday(calendar.WEDNESDAY) # 設置日曆的第一天(第一天以星期三開始)
48 cal = calendar.month(2017, 4)
49 print (cal)
50 
51 print(calendar.monthrange(2017,5))        # 返回某個月的第一天和這個月的所有天數
52 print(calendar.monthcalendar(2017,5))     # 返回某個月以每一周為元素的序列
53 
54 cal = calendar.HTMLCalendar(calendar.MONDAY)
55 print(cal.formatmonth(2017, 5))           # 在html中列印某年某月的日曆
56 
57 print(calendar.isleap(2017))             # 判斷是否為閏年
58 print(calendar.leapdays(2000,2017))       # 判斷兩個年份間閏年的個數

 

二、random模塊

 1 import random
 2 
 3 # 隨機數
 4 print(random.random())              # 返回一個隨機小數'0.4800545746046827'
 5 print(random.randint(1,5))          # 返回(1-5)隨機整型數據
 6 print(random.randrange(1,10))       # 返回(1-10)隨機數據
 7 
 8 # 生成隨機驗證碼
 9 code = ''
10 for i in range(4):
11     current = random.randrange(0,4)
12     if current != i:
13         temp = chr(random.randint(65,90))
14     else:
15         temp = random.randint(0,9)
16     code += str(temp)
17 
18 print(code)


三、OS模塊

 1 import os
 2 
 3 print(os.getcwd())        # 獲得當前工作目錄
 4 print(os.chdir("dirname")) # 改變當前腳本的工作路徑,相當於shell下的cd
 5 print(os.curdir)            # 返回當前目錄‘.'
 6 print(os.pardir)            # 獲取當前目錄的父目錄字元串名‘..'
 7 print(os.makedirs('dirname1/dirname2'))     # 可生成多層遞歸目錄
 8 print(os.removedirs('dirname1/dirname2'))      # 若目錄為空,則刪除,並遞歸到上一級目錄,如若也為空,則刪除,依此類推
 9 print(os.mkdir('test4'))         # 生成單級目錄;相當於shell中mkdir dirname
10 print(os.rmdir('test4'))        # 刪除單級空目錄,若目錄不為空則無法刪除,報錯;相當於shell中rmdir dirname
11 print(os.listdir('/pythonStudy/s12/test'))   # 列出指定目錄下的所有文件和子目錄,包括隱藏文件,並以列表方式列印
12 print(os.remove('log.log'))            # 刪除一個指定的文件
13 print(os.rename("oldname","newname"))    # 重命名文件/目錄)
14 print(os.stat('/pythonStudy/s12/test'))     # 獲取文件/目錄信息
15 print(os.pathsep)            # 輸出用於分割文件路徑的字元串';'
16 print(os.name)               # 輸出字元串指示當前使用平臺。win->'nt'; Linux->'posix'
17 print(os.system(command='bash'))   # 運行shell命令,直接顯示
18 print(os.environ)                  # 獲得系統的環境變數
19 print(os.path.abspath('/pythonStudy/s12/test'))   # 返回path規範化的絕對路徑
20 print(os.path.split('/pythonStudy/s12/test'))     # 將path分割成目錄和文件名二元組返回
21 print(os.path.dirname('/pythonStudy/s12/test'))    # 返回path的目錄。其實就是os.path.split(path)的第一個元素
22 print(os.path.basename('/pythonStudy/s12/test'))   # 返回path最後的文件名。如果path以/或\結尾,那麼就會返回空值。即os.path.split(path)的第二個元素
23 print(os.path.exists('test'))                 # 判斷path是否存在
24 print(os.path.isabs('/pythonStudy/s12/test'))    # 如果path是絕對路徑,返回True
25 print(os.path.isfile('test'))                   # 如果path是一個存在的文件,返回True。否則返回False
26 print(os.path.isdir('/pythonStudy/s12/test'))    # 如果path是一個存在的目錄,則返回True。否則返回False
27 print(os.path.getatime('/pythonStudy/s12/test'))   # 返回path所指向的文件或者目錄的最後存取時間
28 print(os.path.getmtime('/pythonStudy/s12/test'))   # 返回path所指向的文件或者目錄的最後修改時間


四、sys模塊

1 import sys
2 
3 print(sys.argv)          # 命令行參數List,第一個元素是程式本身路徑
4 print(sys.exit(n))     # 退出程式,正常退出時exit(0)
5 print(sys.version)       # 獲取python的版本信息
6 print(sys.path)          # 返回模塊的搜索路徑,初始化時使用PYTHONPATH環境變數的值
7 print(sys.platform)      # 返回操作平臺的名稱


五、shutil模塊

 1 import shutil
 2 shutil.copyfileobj(fsrc, fdst, length=16*1024)      # 將文件內容拷貝到另一個文件中,可以是部分內容
 3 shutil.copyfile(src, dst)                           # 拷貝文件
 4 shutil.copymode(src, dst)                           # 僅拷貝許可權。內容、組、用戶均不變
 5 shutil.copystat(src, dst)                           # 拷貝狀態的信息,包括:mode bits, atime, mtime, flags
 6 shutil.copy(src, dst)                               # 拷貝文件和許可權
 7 shutil.copy2(src, dst)                              # 拷貝文件和狀態信息
 8 shutil.move(src, dst)                               # 遞歸的去移動文件
 9 
10 # base_name: 壓縮包的文件名,也可以是壓縮包的路徑。只是文件名時,則保存至當前目錄,否則保存至指定路徑
11 # format: 壓縮包種類,“zip”, “tar”, “bztar”,“gztar”
12 # root_dir: 要壓縮的文件夾路徑(預設當前目錄)
13 # owner: 用戶,預設當前用戶
14 # group: 組,預設當前組
15 # logger: 用於記錄日誌,通常是logging.Logger對象
16 shutil.make_archive(base_name, format,root_dir,owner,group,logger)   # 創建壓縮包並返迴文件路徑,例如:zip、tar
17 
18 shutil 對壓縮包的處理是調用 ZipFile 和 TarFile 兩個模塊來進行的:
19 
20 # zipfile 壓縮解壓
21 
22 import zipfile
23 # 壓縮
24 z = zipfile.ZipFile('laxi.zip', 'w')
25 z.write('a.log')
26 z.write('data.data')
27 z.close()
28 
29 # 解壓
30 z = zipfile.ZipFile('laxi.zip', 'r')
31 z.extractall()
32 z.close()
33 
34 # tarfile 壓縮解壓
35 
36 import tarfile
37 
38 # 壓縮
39 tar = tarfile.open('your.tar','w')
40 tar.add('/Users/wupeiqi/PycharmProjects/bbs2.zip', arcname='bbs2.zip')
41 tar.add('/Users/wupeiqi/PycharmProjects/cmdb.zip', arcname='cmdb.zip')
42 tar.close()
43 
44 # 解壓
45 tar = tarfile.open('your.tar','r')
46 tar.extractall()  # 可設置解壓地址
47 tar.close()


六、XML處理模塊

 

  1 # xml的格式如下,就是通過<>節點來區別數據結構的:
  2 xmltest.xml
  3 
  4 <?xml version="1.0"?>
  5 
  6 <data>
  7 
  8     <country name="Liechtenstein">
  9 
 10         <rank updated="yes">2</rank>
 11 
 12         <year>2008</year>
 13 
 14         <gdppc>141100</gdppc>
 15 
 16         <neighbor name="Austria" direction="E"/>
 17 
 18         <neighbor name="Switzerland" direction="W"/>
 19 
 20     </country>
 21 
 22     <country name="Singapore">
 23 
 24         <rank updated="yes">5</rank>
 25 
 26         <year>2011</year>
 27 
 28         <gdppc>59900</gdppc>
 29 
 30         <neighbor name="Malaysia" direction="N"/>
 31 
 32     </country>
 33 
 34     <country name="Panama">
 35 
 36         <rank updated="yes">69</rank>
 37 
 38         <year>2011</year>
 39 
 40         <gdppc>13600</gdppc>
 41 
 42         <neighbor name="Costa Rica" direction="W"/>
 43 
 44         <neighbor name="Colombia" direction="E"/>
 45 
 46     </country>
 47 
 48 </data> 
 49 
 50 
 51 #  xml協議在各個語言里的都 是支持的,在python中可以用以下模塊操作xml  
 52 
 53 import xml.etree.ElementTree as ET
 54 
 55 tree = ET.parse("xmltest.xml")
 56 root = tree.getroot()
 57 print(root.tag)
 58 
 59 #遍歷xml文檔
 60 for child in root:
 61     print(child.tag, child.attrib)
 62     for i in child:
 63         print(i.tag,i.text)
 64 
 65 #只遍歷year 節點
 66 for node in root.iter('year'):
 67     print(node.tag,node.text)
 68 
 69 
 70 # 修改和刪除xml文檔內容
 71 
 72 import xml.etree.ElementTree as ET
 73 
 74 tree = ET.parse("xmltest.xml")
 75 root = tree.getroot()
 76 
 77 #修改
 78 
 79 for node in root.iter('year'):
 80     new_year = int(node.text) + 1
 81     node.text = str(new_year)
 82     node.set("updated","yes")
 83 tree.write("xmltest.xml")
 84 
 85 #刪除node
 86 
 87 for country in root.findall('country'):
 88    rank = int(country.find('rank').text)
 89    if rank > 50:
 90        root.remove(country)
 91 tree.write('output.xml')
 92 
 93 
 94 # 自己創建xml文檔
 95 import xml.etree.ElementTree as ET
 96 
 97 new_xml = ET.Element("namelist")
 98 name = ET.SubElement(new_xml, "name", attrib={"enrolled": "yes"})
 99 age = ET.SubElement(name, "age", attrib={"checked": "no"})
100 age = ET.SubElement(name, "age")
101 age.text = '33'
102 name2 = ET.SubElement(new_xml, "name", attrib={"enrolled": "no"})
103 age = ET.SubElement(name2, "age")
104 age.text = '19'
105 et = ET.ElementTree(new_xml)  # 生成文檔對象
106 et.write("test.xml", encoding="utf-8", xml_declaration=True)
107 ET.dump(new_xml)  # 列印生成的格式


七、configparser模塊

     用於生成和修改常見配置文檔

 

 1 # 好多軟體的常見文檔格式如下
 2  [DEFAULT]
 3  compressionlevel = 9
 4  serveraliveinterval = 45
 5  compression = yes
 6  forwardx11 = yes
 7  
 8  [bitbucket.org]
 9  user = hg
10  
11  [topsecret.server.com]
12  host port = 50022
13  forwardx11 = no
14  
15  # python 生成一個這樣的文檔
16  
17  import configparser
18  
19  config = configparser.ConfigParser()
20  
21  config["DEFAULT"] = {'ServerAliveInterval': '45',
22                       'Compression': 'yes',
23                       'CompressionLevel': '9'}
24  
25  config['bitbucket.org'] = {}
26  config['bitbucket.org']['User'] = 'hg'
27  config['topsecret.server.com'] = {}
28  topsecret = config['topsecret.server.com']
29  topsecret['Host Port'] = '50022'
30  topsecret['ForwardX11'] = 'no'
31  config['DEFAULT']['ForwardX11'] = 'yes'
32  with open('example.ini', 'w') as configfile:
33      config.write(configfile)
34  
35  
36  
37  # 寫完了還可以再讀出來
38  
39  import configparser
40  config = configparser.ConfigParser()
41  config.sections()
42  file = config.read('example.ini')
43  print(file)      # ['example.ini']
44  
45  title = config.sections()
46  print(title)     # ['bitbucket.org', 'topsecret.server.com']
47  
48  print('bitbucket.org' in config)     # True
49  print('bytebong.com' in config)      # False
50  print(config['bitbucket.org']['User'])   # hg
51  print(config['DEFAULT']['Compression'])   # yes
52  
53  topsecret = config['topsecret.server.com']
54  print(topsecret['ForwardX11'])           # no
55  print(topsecret['Host Port'])         # 50022
56  
57  for key in config['topsecret.server.com']:
58      print(key)
59  '''
60    輸出結果:
61              host port
62              forwardx11
63              compressionlevel
64              serveraliveinterval
65              compression
66  '''
67  print(config['topsecret.server.com']['Compression'])   # yes
68 
69 # configparser增刪改查語法
70 import configparser
71 
72 config = configparser.ConfigParser()
73 config.read('i.cfg')
74 
75 secs = config.sections()       # 返回配置文件中的主節點
76 print (secs)
77 
78 options = config.options('bitbucket.org')
79 print(options)                 # 返回所有子節點信息
80 
81 item_list = config.items('bitbucket.org')
82 print(item_list)              # 列出所有子節點詳細信息
83 
84 val = config.get('topsecret.server.com','host port')
85 print(val)                    # 返回單個子節點信息
86 
87 val2 = config.getint('topsecret.server.com','host port')
88 print(val2)
89 
90 # 刪除'bitbucket.org'
91 sec = config.remove_section('bitbucket.org')
92 config.write(open('i.cfg','w'))
93 
94 
95 sec2 = config.add_section('huhuan2')      # 添加主節點
96 config.set('huhuan2','k','1111')          # 添加子節點
97 config.set('huhuan','kk','2222')
98 config.remove_option('huhuan','kk')       # 刪除子節點
99 config.write(open('i.cfg','w'))

 

八、hashlib模塊

  用於加密相關的操作

 1 import hashlib
 2 
 3 # ****** md5 ******
 4 m =hashlib.md5()
 5 m.update(b'hello')
 6 print(m.hexdigest())     # 16進位格式
 7 print(m.digest())        # 2進位格式
 8 
 9 # ****** shal ******
10 hash = hashlib.sha1()
11 hash.update(b'hello')
12 print(hash.hexdigest())
13 
14 # ****** sha224 ******
15 hash = hashlib.sha224()
16 hash.update(b'hello')
17 print(hash.hexdigest())
18 
19 # ****** sha256 ******
20 hash = hashlib.sha256()
21 hash.update(b'hello')
22 print(hash.hexdigest())
23 
24 # ****** sha384 ******
25 hash = hashlib.sha384()
26 hash.update(b'hello')
27 print(hash.hexdigest())
28 
29 # ****** sha512 ******
30 hash = hashlib.sha512()
31 hash.update(b'hello')
32 print(hash.hexdigest())
33 
	   

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 第一種方案: 用require吧 <configuration> ... <startup> <requiredRuntime version="4.0.30319" safemode="true"/> </startup> ... </configuration> 轉載自:https://soci ...
  • 如果需要基於鍵對所需集合排序,就可以使用SortedList<TKey,TValue>類。這個類按照鍵給元素排序。這個集合中的值和鍵都可以使用任何類型。定義為鍵的自定義類型需要實現IComparer<T>介面,用於給列表中的元素排序。 使用構造函數創建一個有序列表,在用Add方法添加: var bo ...
  • LinkedList<T>是一個雙向鏈表,其元素會指向它前面和後面的元素。這樣,通過移動到下一個元素可以正向遍歷鏈表,通過移動到前一個元素可以反向遍歷鏈表。 鏈表在存儲元素時,不僅要存儲元素的值,還必須存儲每個元素的下一個元素和上一個元素的信息。這就是LinkedList<T>包含LinkedLis ...
  • 本人菜鳥一枚,以下是我在項目中遇到一些問題的解決方法。 初次接觸到.net mvc發現html的有些屬性無法實現,比如使用easyui的data-options屬性會發生以下錯誤: 遇到這種情況可以將 “-”變為下劃線 "_" 即可解決: 在定義easyui-tree的json數據實體,發現easy ...
  • 棧(Stack)和隊列是非常類似的一個容器,只是棧是一個後進先出(LIFO)的容器。 棧用Push()方法在棧中添加元素,用Pop()方法獲取最近添加的一個元素: Stack<T>與Queue<T>類(http://www.cnblogs.com/afei-24/p/6829817.html)類似, ...
  • 隊列是其元素按照先進先出(FIFO)的方式來處理的集合。 隊列使用System.Collections.Generic名稱空間中的泛型類Queue<T>實現。在內部,Queue<T>類使用T類型的數組,這類似List<T>(http://www.cnblogs.com/afei-24/p/68247 ...
  • 查看原文 本文我們來學習 Code first 在初始化資料庫時是如何決定資料庫名稱和伺服器的。 下圖展示了資料庫初始化的工作流。 由圖可知,上下文類的基本構造函數的參數可以有以下幾種方式: 1、沒有參數 2、有資料庫名 3、有連接字元串名 一、沒有參數(No Parameter) 如果上下文類的基 ...
  • 總目錄 插件目錄結構(一) Admin後臺頁面編寫(二) 前臺模板頁編寫(三) URL重寫(四) 本實例旨在以一個實際的項目中的例子來介紹如何在dtcms中製作插件,本系列文章非入門教程,部分邏輯實現一帶而過,敬請諒解。 時隔2年,再次收到本文的回覆,實在慚愧,本系列竟然終止於第二章節。不從外部找原... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...