1. 程式人生 > >軟件開發規範及常用模塊一

軟件開發規範及常用模塊一

兩層 表達式 轉換 tac 報錯 blog lin 傳輸 元素

一、軟件開發規範

技術分享圖片

        ATM #總文件夾
bin:用來放程序執行文件;start.py
conf:配置文件
log:日誌文件
lib:放模塊和包
db:數據文件
core:放程序的核心邏輯,裏面src.py
readme #用來保存詳細的每個文件夾的介紹,及作用
以上並未非規定,而是看個人理解不同自行定制。但一定要清晰明了。
二、序列化

      
    前我們學習過用eval內置方法可以將一個字符串轉成python對象,不過,eval方法是有局限性的,對於普通的數據類型,json.loads和eval都能用,
    但遇到特殊類型的時候,eval就不管用了,所以eval的重點還是通常用來執行一個字符串表達式,並返回表達式的值。

   import json
  x="[null,true,false,1]"
   print(eval(x)) #報錯,無法解析null類型,而json就可以
  print(json.loads(x))

    什麽是序列化?

    我們把對象(變量)從內存中變成可存儲或傳輸的過程稱之為序列化
    序列化的主要目的:
  1:持久保存狀態
  2:跨平臺數據交互

    序列化之後,不僅可以把序列化後的內容寫入磁盤,還可以通過網絡傳輸到別的機器上,如果收發的雙方約定好實用一
    種序列化的格式,那麽便打破了平臺/語言差異化帶來的限制,實現了跨平臺數據交互。反過來,把變量內容從序列化的
    對象重新讀到內存裏稱之為反序列化,即unpickling。



1. json
          如果我們要在不同的編程語言之間傳遞對象,就必須把對象序列化為標準格式,比如XML,但更好的方法是序列化為JSON,
因為JSON表示出來就是一個字符串,可以被所有語言讀取,也可以方便地存儲到磁盤或者通過網絡傳輸。
JSON表示的對象就是標準的JavaScript語言的對象,JSON和Python內置的數據類型對應如下:

技術分享圖片

技術分享圖片

      
    2. pickle
     Pickle的問題和所有其他編程語言特有的序列化問題一樣,就是它只能用於Python 。因此使用較少,不過它可以支持python內
     所有的數據類型。
      


三、logging模塊

logging模塊的四種對象:
1 logger:負責產生日誌
2 filter:過濾日誌(不常用)
3 handler:控制日誌打印到文件or終端
4 formatter:控制日誌的格式

四種對象具體使用方式(了解即可) :

logger:負責產生日誌
logger1=logging.getLogger(‘xxx‘)

filter:過濾日誌(不常用)

handler:控制日誌打印到文件or終端
fh1=logging.FileHandler(filename=‘a1.log‘,encoding=‘utf-8‘)
fh2=logging.FileHandler(filename=‘a2.log‘,encoding=‘utf-8‘)
sh=logging.StreamHandler()

formatter:控制日誌的格式
formatter1=logging.Formatter(
fmt=‘%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s‘,
datefmt=‘%Y-%m-%d %H:%M:%S %p‘,
)

formatter2=logging.Formatter(fmt=‘%(asctime)s - %(message)s‘,)


為logger1對象綁定handler
logger1.addHandler(fh1)
logger1.addHandler(fh2)
logger1.addHandler(sh)

為handler對象綁定日誌格式
fh1.setFormatter(formatter1)
fh2.setFormatter(formatter1)
sh.setFormatter(formatter2)


日誌級別: 兩層關卡,必須都通過,日誌才能正常記錄
logger1.setLevel(10)
fh1.setLevel(10)
fh2.setLevel(10)
sh.setLevel(10)

調用logger1對象下的方法,產生日誌,然後交給不同的handler,控制日誌記錄到不同的地方
logger1.debug(‘調試信息‘)

日常開發不需要自己寫日誌模塊,通常的做法是拿別人寫好的去使用,只需了解使用方法即可。

四、OS模塊

優先掌握
os.path.dirname(path) 返回path的目錄。其實就是os.path.split(path)的第一個元素(r‘C:\a\b\c\d.txt‘))
os.path.basename(path) 返回path最後的文件名。如何path以/或\結尾,那麽就會返回空值。(r‘C:\a\b\c\d.txt‘))

os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False。只管路徑是否存在,不區分文件還是文件夾
print(os.path.exists(r‘D:\code\SH_fullstack_s1\day15\下午\json.py‘))
print(os.path.exists(r‘D:\code\SH_fullstack_s1\day15‘))

os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False。
print(os.path.isfile(r‘D:\code\SH_fullstack_s1\day15\下午‘))

os.path.isdir(path) 如果path是一個存在的目錄,則返回True。否則返回False

了解即可:

os.path.abspath(path) 返回path規範化的絕對路徑
file_path=r‘a\b\c\d.txt‘
print(os.path.abspath(file_path))

os.path.split(path) 將path分割成目錄和文件名二元組返回
res=os.path.split(r‘C:\a\b\c\d.txt‘)
print(res[-1])
print(res[0])

os.path.isabs(path) 如果path是絕對路徑,返回True
print(os.path.isabs(r‘b/c/d.txt‘))

os.path.normcase 在Windows上,文件系統上, 把路徑轉換為小寫字母,正斜杠轉換為反斜杠。
print(os.path.normcase(‘c:/windows\\system32\\‘) )



















軟件開發規範及常用模塊一