---恢復內容開始---python
跟操做系統相關linux
import os # os.makedirs('dirname1/dirname2')#生成多層遞歸目錄 # os.removedirs('dirname1')#若目錄爲空,則刪除,查找上級目錄,若是爲空也刪除,遞歸刪除 # os.mkdir('dirname')#生成單級目錄,不能生成多級 # os.rmdir('dirname1')#刪除單級空目錄,若是目錄不爲空報錯沒法刪除 # os.listdir('dirname')#列出指定目錄下的全部文件極其子目錄,包括隱藏文件,以列表的形式打印 # os.remove('dirname/1.py')#刪除指定文件 # os.rename('old','new')#重命名文件或者目錄 # os.stat('path/filename')#獲取文件/目錄的信息 # # os.system('dir')#運行shell命令,直接顯示 # os.popen('bash command').read()#運行shell命令,獲取執行結果 # os.getcwd()#獲取當前工做目錄 # os.chdir('dirname')#改變當前腳本工做目錄,至關與cd # # # os.path # os.path.abspath('day1')#返回path規範化的絕對路徑 # os.path.split('D:\python\python113天\做業\day11')#將path分割成目錄和文件名按元組返回 # os.path.dirname('D:\python\python113天\做業\day11')#返回path的目錄名,就是os.path.split()返回元組的第一項 # os.path.basename('D:\python\python113天\做業\day11')#返回path的文件名,就是os.path.split()返回元組的第二項 # os.path.exists('path')#若是path存在,返回True;不然返回false # os.path.isabs('path')#判斷path是不是絕對路徑 # os.path.isfile('path')#判斷path是不是一個存在的文件 # os.path.isdir('path')#判斷path是不是一個存在的目錄 # os.path.join('c:','D:','kapu','jcc')#將多個路徑組合後返回,第一個絕對路徑前的參數將被忽略 # os.path.getatime('path')#返回path所指向的文件或者目錄的最後訪問時間 # os.path.getmtime('path')#返回path指向的文件或者目錄的最後修改時間 # os.path.getsize('path')#返回path的大小 # os.sep#輸出操做系統特定的路徑分隔符 # os.linesep #輸出當前平臺使用的終止符 # os.pathsep #輸出分割文件路徑的字符串 # os.name #輸出字符串顯示當前使用平臺,win->nt linux->posix
和python解釋器交互shell
import sys # sys.platform#返回操做系統平臺的名稱 # sys.version #獲取python解釋器的版本信息 # sys.exit()#退出系統,正常退出exit(0),非正常退出exit(1) # sys.path#返回模塊搜索路徑 # sys.argv#
序列化:數據類型-->字符串
反序列化:字符串-->數據類型
什麼是序列?字符串
應用狀況:數據存儲,網絡傳輸json
優勢: 通用的序列化格式
缺點:只有不多一部分類型可以經過json轉化成字符串bash
# 序列化過程 dumps(直接在內存中操做) dump(對文件中的內容進行操做) import json # dumps dic = {1:'a'} str_dic = json.dumps(dic) print(str_dic)#{"1": "a"} # dump with open('d:\jcc.txt','w',encoding='utf-8') as f: json.dump(dic,f)#把dic字典序列化後寫入jcc.txt文件中 # 反序列過程 loads(直接在內存中操做)load(對文件中的內容進行操做) # loads dic_d = json.loads(str_dic) print(dic_d)#{'1': 'a'} # load with open('d:\jcc.txt',encoding='utf-8') as f: str = json.load(f) print(str) # json只能序列化列表和字典
優勢:全部的python中的數據類型均可以轉化成字符串
序列化的內容只有python能理解,且部分反序列化依賴代碼
能夠分步load和dump
序列化以後的內容是bytes類型網絡
序列化句柄
使用句柄直接操做,很是方便app
python3中獨有的方法ide
import shelve # 序列化 f = shelve.open('shelve_file') f['key'] = {'int':1,'float':9.2} f.close() # 反序列化 f = shelve.open('shelve_file') she = f['key'] f.close() print(she)
import hashlib res = hashlib.md5() res.update(b'jcc') #必須轉成bytes類型 print(res.hexdigest()) res2 = hashlib.sha1() res2.update(b'jcc') print(res2.hexdigest()) res3 = hashlib.sha3_224() res3.update(b'jcc') print(res3.hexdigest())
res = hashlib.md5(bytes('salt',encoding='utf-8')) res.update(b'jcc') #必須轉成bytes類型 print(res.hexdigest()) #動態加鹽 給鹽動態的加一些字符 res = hashlib.md5(bytes('salt',encoding='utf-8')+b'123') res.update(b'jcc') print(res.hexdigest())
import hashlib res = hashlib.md5() res.update(b'j') #必須轉成bytes類型 res.update(b'cc') print(res.hexdigest())
配置文件模塊google
能夠包含多個節section,每一個節能夠有多個參數(鍵=值)加密
import configparser config = configparser.ConfigParser() config["DEFAULT"] = {'ServerAliveInterval': '45', 'Compression': 'yes', 'CompressionLevel': '9', 'ForwardX11':'yes' } config['bitbucket.org'] = {'User':'hg'} config['topsecret.server.com'] = {'Host Port':'50022','ForwardX11':'no'} with open('example.ini', 'w') as configfile: config.write(configfile) #建立一個example.ini配置文件
import configparser config = configparser.ConfigParser() 查找節點 print(config.sections()) # [] config.read('example.ini') print(config.sections()) # ['bitbucket.org', 'topsecret.server.com'] 判斷節點是否在文件中 print('bytebong.com' in config) # False print('bitbucket.org' in config) # True # 查找某個節中的鍵值 print(config['bitbucket.org']["user"]) # hg print(config['DEFAULT']['Compression']) #yes print(config['topsecret.server.com']['ForwardX11']) #no 查看某個節 print(config['bitbucket.org']) #<Section: bitbucket.org> for key in config['bitbucket.org']: # 注意,有default會默認default的鍵 print(key) print(config.options('bitbucket.org')) # 同for循環,找到'bitbucket.org'下全部鍵 print(config.items('bitbucket.org')) #找到'bitbucket.org'下全部鍵值對 print(config.get('bitbucket.org','compression')) # yes get方法Section下的key對應的value
import configparser config = configparser.ConfigParser() config.read('example.ini',encoding='utf-8') config.add_section('yuan') #新增一個section config.remove_section('bitbucket.org') #刪除一個節 config.remove_option('topsecret.server.com',"forwardx11") #刪除某個節中的某個屬性 config.set('topsecret.server.com','k1','11111') #修改屬性 config.set('yuan','k2','22222') config.write(open('new2.ini', "w")) #寫入文件,任何改動必須提交才能生效
處理可預測且沒法避免的錯誤
try: ret = int(input('>>>')) print(ret) except ValueError as e: #發生異常時執行如下代碼 print('input number',e) else: #沒有異常執行如下代碼 print('-------') finally: #不管異常是否出現,都執行的代碼 print('完成')
except支持多分支 萬能異常 Exception:能夠捕捉全部異常 儘量的單獨處理異常,萬能異常寫在最後
主動觸發一個異常
try: raise TypeError('類型異常') except TypeError as e: print(e)
自定義一個異常
class EvaException(BaseException): def __init__(self,msg): self.msg=msg def __str__(self): return self.msg try: raise EvaException('類型錯誤') except EvaException as e: print(e)
經常使用異常
# AttributeError 試圖訪問一個對象沒有的樹形,好比foo.x,可是foo沒有屬性x # IOError 輸入/輸出異常;基本上是沒法打開文件 # ImportError 沒法引入模塊或包;基本上是路徑問題或名稱錯誤 # IndentationError 語法錯誤(的子類) ;代碼沒有正確對齊 # IndexError 下標索引超出序列邊界,好比當x只有三個元素,卻試圖訪問x[5] # KeyError 試圖訪問字典裏不存在的鍵 # KeyboardInterrupt Ctrl+C被按下 # NameError 使用一個還未被賦予對象的變量 # SyntaxError Python代碼非法,代碼不能編譯(我的認爲這是語法錯誤,寫錯了) # TypeError 傳入對象類型與要求的不符合 # UnboundLocalError 試圖訪問一個還未被設置的局部變量,基本上是因爲另有一個同名的全局變量, # 致使你覺得正在訪問它 # ValueError 傳入一個調用者不指望的值,即便值的類型是正確的
menu = { '北京': { '海淀': { '五道口': { 'soho': {}, '網易': {}, 'google': {} }, '中關村': { '愛奇藝': {}, '汽車之家': {}, 'youku': {}, }, '上地': { '百度': {}, }, }, '昌平': { '沙河': { '老男孩': {}, '北航': {}, }, '天通苑': {}, '回龍觀': {}, }, '朝陽': {}, '東城': {}, }, '上海': { '閔行': { "人民廣場": { '炸雞店': {} } }, '閘北': { '火車戰': { '攜程': {} } }, '浦東': {}, }, '山東': {}, } # 堆棧實現三級菜單 li = [menu] while li: for i in li[-1]:print(i) k = input('>>>') if k in li[-1].keys() and li[-1][k]:li.append(li[-1][k]) elif k=='b':li.pop() elif k=='q':break
---恢復內容結束---
跟操做系統相關
import os # os.makedirs('dirname1/dirname2')#生成多層遞歸目錄 # os.removedirs('dirname1')#若目錄爲空,則刪除,查找上級目錄,若是爲空也刪除,遞歸刪除 # os.mkdir('dirname')#生成單級目錄,不能生成多級 # os.rmdir('dirname1')#刪除單級空目錄,若是目錄不爲空報錯沒法刪除 # os.listdir('dirname')#列出指定目錄下的全部文件極其子目錄,包括隱藏文件,以列表的形式打印 # os.remove('dirname/1.py')#刪除指定文件 # os.rename('old','new')#重命名文件或者目錄 # os.stat('path/filename')#獲取文件/目錄的信息 # # os.system('dir')#運行shell命令,直接顯示 # os.popen('bash command').read()#運行shell命令,獲取執行結果 # os.getcwd()#獲取當前工做目錄 # os.chdir('dirname')#改變當前腳本工做目錄,至關與cd # # # os.path # os.path.abspath('day1')#返回path規範化的絕對路徑 # os.path.split('D:\python\python113天\做業\day11')#將path分割成目錄和文件名按元組返回 # os.path.dirname('D:\python\python113天\做業\day11')#返回path的目錄名,就是os.path.split()返回元組的第一項 # os.path.basename('D:\python\python113天\做業\day11')#返回path的文件名,就是os.path.split()返回元組的第二項 # os.path.exists('path')#若是path存在,返回True;不然返回false # os.path.isabs('path')#判斷path是不是絕對路徑 # os.path.isfile('path')#判斷path是不是一個存在的文件 # os.path.isdir('path')#判斷path是不是一個存在的目錄 # os.path.join('c:','D:','kapu','jcc')#將多個路徑組合後返回,第一個絕對路徑前的參數將被忽略 # os.path.getatime('path')#返回path所指向的文件或者目錄的最後訪問時間 # os.path.getmtime('path')#返回path指向的文件或者目錄的最後修改時間 # os.path.getsize('path')#返回path的大小 # os.sep#輸出操做系統特定的路徑分隔符 # os.linesep #輸出當前平臺使用的終止符 # os.pathsep #輸出分割文件路徑的字符串 # os.name #輸出字符串顯示當前使用平臺,win->nt linux->posix
和python解釋器交互
import sys # sys.platform#返回操做系統平臺的名稱 # sys.version #獲取python解釋器的版本信息 # sys.exit()#退出系統,正常退出exit(0),非正常退出exit(1) # sys.path#返回模塊搜索路徑 # sys.argv#
序列化:數據類型-->字符串
反序列化:字符串-->數據類型
什麼是序列?字符串
應用狀況:數據存儲,網絡傳輸
優勢: 通用的序列化格式
缺點:只有不多一部分類型可以經過json轉化成字符串
# 序列化過程 dumps(直接在內存中操做) dump(對文件中的內容進行操做) import json # dumps dic = {1:'a'} str_dic = json.dumps(dic) print(str_dic)#{"1": "a"} # dump with open('d:\jcc.txt','w',encoding='utf-8') as f: json.dump(dic,f)#把dic字典序列化後寫入jcc.txt文件中 # 反序列過程 loads(直接在內存中操做)load(對文件中的內容進行操做) # loads dic_d = json.loads(str_dic) print(dic_d)#{'1': 'a'} # load with open('d:\jcc.txt',encoding='utf-8') as f: str = json.load(f) print(str) # json只能序列化列表和字典
優勢:全部的python中的數據類型均可以轉化成字符串
序列化的內容只有python能理解,且部分反序列化依賴代碼
能夠分步load和dump
序列化以後的內容是bytes類型
序列化句柄
使用句柄直接操做,很是方便
python3中獨有的方法
import shelve # 序列化 f = shelve.open('shelve_file') f['key'] = {'int':1,'float':9.2} f.close() # 反序列化 f = shelve.open('shelve_file') she = f['key'] f.close() print(she)
處理可預測且沒法避免的錯誤
try: ret = int(input('>>>')) print(ret) except ValueError as e: #發生異常時執行如下代碼 print('input number',e) else: #沒有異常執行如下代碼 print('-------') finally: #不管異常是否出現,都執行的代碼 print('完成')
except支持多分支 萬能異常 Exception:能夠捕捉全部異常 儘量的單獨處理異常,萬能異常寫在最後
主動觸發一個異常
try: raise TypeError('類型異常') except TypeError as e: print(e)
自定義一個異常
class EvaException(BaseException): def __init__(self,msg): self.msg=msg def __str__(self): return self.msg try: raise EvaException('類型錯誤') except EvaException as e: print(e)
經常使用異常
# AttributeError 試圖訪問一個對象沒有的樹形,好比foo.x,可是foo沒有屬性x # IOError 輸入/輸出異常;基本上是沒法打開文件 # ImportError 沒法引入模塊或包;基本上是路徑問題或名稱錯誤 # IndentationError 語法錯誤(的子類) ;代碼沒有正確對齊 # IndexError 下標索引超出序列邊界,好比當x只有三個元素,卻試圖訪問x[5] # KeyError 試圖訪問字典裏不存在的鍵 # KeyboardInterrupt Ctrl+C被按下 # NameError 使用一個還未被賦予對象的變量 # SyntaxError Python代碼非法,代碼不能編譯(我的認爲這是語法錯誤,寫錯了) # TypeError 傳入對象類型與要求的不符合 # UnboundLocalError 試圖訪問一個還未被設置的局部變量,基本上是因爲另有一個同名的全局變量, # 致使你覺得正在訪問它 # ValueError 傳入一個調用者不指望的值,即便值的類型是正確的
menu = { '北京': { '海淀': { '五道口': { 'soho': {}, '網易': {}, 'google': {} }, '中關村': { '愛奇藝': {}, '汽車之家': {}, 'youku': {}, }, '上地': { '百度': {}, }, }, '昌平': { '沙河': { '老男孩': {}, '北航': {}, }, '天通苑': {}, '回龍觀': {}, }, '朝陽': {}, '東城': {}, }, '上海': { '閔行': { "人民廣場": { '炸雞店': {} } }, '閘北': { '火車戰': { '攜程': {} } }, '浦東': {}, }, '山東': {}, } # 堆棧實現三級菜單 li = [menu] while li: for i in li[-1]:print(i) k = input('>>>') if k in li[-1].keys() and li[-1][k]:li.append(li[-1][k]) elif k=='b':li.pop() elif k=='q':break