python基礎知識(四)
(四)處理文件
a、文件的格式主要有txt、html、xml,接下來主要講的是txt格式的文件處理
對文件進行讀寫等操作會用到的函數是open(),第一個參數file是指傳入你創建的文件名,其中有一個參數是mode,mode的意思是打開文件的模式
例如:在pycharm中先創建一個test.txt,寫入內容:hello,welcome to my world~
1 file=open("test.txt","r") 2 3 print(file.read())
打印出來的結果是 hello,welcome to my world~
b、模式有以下幾種:
r :只讀,如果你要寫入內容的話就會報錯(not readable)
r+(盡量少用):可讀可寫,如果是先寫再讀的話,就是從頭開始覆蓋寫,讀取光標之后的內容,讀寫是跟着光標走的;如果是先讀再寫的話,就是添加在內容的末尾
w(慎重使用):只寫,硬要去讀的話會報錯(not readable)
w+ :可讀可寫,不管是w還是w+,如果文件存在就直接清空再重寫,如果文件不存在那就新建一個文件再寫
a :追加,可讀可寫,如果文件存在就直接追加寫,如果不存在就會新建一個文件進行結果寫入
a+(推薦使用):追加 可讀可寫
注:file文件open之后默認是r,只讀模式;如果要寫入中文的話,要注意編碼格式,可以用encoding來指定編碼格式。
c、以上講到的內容重點要掌握的是r、a
接下來舉例進行說明,例如:先創建一個名為test.txt的文件,寫入內容:你好啊,好久不見~
1 file=open("test.txt","r",encoding='utf-8') 2 3 print(file.read())
打印出來的結果是 你好啊,好久不見~
注:file.read()是讀取所有的內容
file.readline()是按行進行讀取
file.readlines()是讀取多行,返回的是一個列表
1 file_2=open("test.txt","a",encoding='utf-8') 2 3 print(file.write("今天天氣好好呀"))
打印出來的結果是 你好啊,好久不見~今天天氣好好呀
注:file.write()寫入內容
file.writelines()寫入多行內容
(五)路徑處理
1、os模塊
首先我們要知道路徑處理會用到os模塊,os模塊提供了多數操作系統的功能接口函數,當os模塊被導入后,它會自適應於不同的操作系統平台,根據不同的平台進行相應的操作,在python編程時,經常和文件、目錄打交道,這些都會用到os模塊;這個模塊可以在Lib目錄下找到,是一個單獨的模塊,所以要引用這個模塊可以直接用import進行引入:import os,接下來再對os的其他用法進行例舉:
(1)創建/刪除文件夾/目錄/文件
a、新建一個目錄/文件夾
os.mkdir("目錄/文件夾的名字")
b、跨級新建目錄--->用/來代表路徑的不同層級,跨級新建必須確保上一層級已經存在,否則新建的時候會報錯
os.mkdir("上一層級的目錄名/需要新建的目錄名")
c、轉義字符 \n \r \t
當創建文件夾或者目錄的路徑當中出現了轉義字符,可以再加一個\、r\R來讓轉義字符失效,如果路徑當中不存在轉義字符,則路徑當中的\、\\、/、//是沒有區別的
d、刪除目錄(也是需要一級一級的來刪除,否則會報錯)
os.rmdir("需要刪除的目錄路徑")
e、新建文件
open("文件名")
os.open("文件名")
f、刪除文件
os.remove("要刪除的文件路徑")
os.removedirs("要刪除的文件路徑")--->遞歸刪除
g、目錄列表
os.listdir():獲取當前路徑下面所有的文件和目錄,返回的是列表
(2)路徑的獲取
os.getcwd()--->獲取的是當前路徑
os.path.realpath(__file__):獲取當前文件所在的絕對路徑,具體到模塊名,如果參數是__file__就說明是本文件所在的絕對路徑
os.path.split(路徑):拆分路徑,這樣可以把一個路徑拆分成兩部分,后一部分總是最后級別的目錄或文件名,返回的是元祖格式的數據
os.path.exists():用來檢驗給出的路徑是否存在,判斷文件/文件夾是否存在,返回的是布爾值
os.path.dirname(路徑):返回文件路徑
os.path.basename(路徑):返回文件名
os.path.isdir:判斷當前文件是否是目錄,返回的是布爾值
os.path.isfile:判斷當前文件是否是文件,返回的是布爾值
(3)路徑的拼接
a、用+進行拼接
例如:
1 import os 2 new_path=os.getcwd()+"\python" 3 os.mkdir(new_path)
b、os.path.join(a,*n):連接兩個部分的路徑,組成一個完整的路徑
例如:
1 import os 2 new_path=os.path.join(os.getcwd(),"python","subject_1") 3 os.mkdir(new_path)
join后面的第二個參數是動態參數,可以傳入多個地址進行拼接,如果要跨級拼接路徑,必須確保上一級的目錄是已經存在的,否則會報錯
也可以把需要拼接的路徑都放在一起,多個路徑放在一起就必須要加斜杠或者反斜杠:
1 import os 2 new_path=os.path.join(os.getcwd(),"python\subject_1") 3 os.mkdir(new_path)
2、相對路徑和絕對路徑
相對路徑:從當前目錄開始一級一級往下讀
絕對路徑:從根目錄開始一級一級往下讀
拓展:給定一個路徑,請打印出所有的路徑(直到這個路徑下沒有目錄為止) 思路:遞歸函數
1 import os 2 for path in os.listdir(os.getcwd()) : 3 if os.path.isdir(path): 4 os.listdir(os.path.join(os.getcwd(),path)) 5 print("{0}還需要進一步處理".format(path)) 6 else: 7 print("該路徑已經窮盡了",os.path.join(os.getcwd(),path))
3、異常處理
a、 異常:你在運行代碼的過程中遇到的任何錯誤,帶有error字樣的都是異常
異常處理:我們對代碼中所有可能會出現的異常進行的處理
初級異常處理:主要處理的是某個錯誤,某種類型的錯誤或者是只要有錯誤就進行抓取
進一步的異常處理:不僅對錯誤進行抓取,而且會采取措施
b、標准異常
BaseException 所有異常的基類
SystemExit 解釋器請求退出
KeyboardInterrupt 用戶中斷執行
Exception 常規錯誤的基類
StopIteration 迭代器沒有更多的值
GeneratorExit 生成器發生異常來通知退出
StandardError 所有數值計算錯誤的基類
FloatingPointError 浮點計算錯誤
OverflowError 數值計算超出最大限制
ZeroDivisionError 除零
AssrttionError 斷言語句失敗
AttributeError 對象沒有這個屬性
EOFError 沒有內建輸入,到達EFO標記
EnvrionmentError 操作系統錯誤的基類
IOError 輸入/輸出操作失敗
OSError 操作系統錯誤
WindowsError 系統調用失敗
ImportError 導入模塊/對象失敗
LookupError 無效數據查詢的基類
IndexError 序列中沒有此索引
等等等等等等
c、語法
try......except Exception as e......
try......except....finally..... finally的作用:不管有沒有犯錯都會執行
try.....except.....else....(不常用)跟try下面的代碼是一起的,如果try下面的代碼沒有犯錯,else就會執行,反之則不會執行。
例如:
1 import os 2 try: # 警察 3 os.mkdir ("Alisa") # 嫌疑人 4 except Exception as e: # 警力出動 把錯誤抓起來 存到變量e里面去 5 print ("抓到你了") 6 print("你犯的錯是{0}".format(e)) 7 file=open("error.txt","a+",encoding="utf-8") 8 file.write(str(e)) 9 file.close()#關閉文件 10 print ("啦啦啦啦")
打印出來的結果是:啦啦啦啦
例如:
1 import os 2 try: 3 os.rmdir("Alisa/vict") 4 except Exception as e: 5 print("你犯的錯是{0}".format(e)) 6 file=open("error.txt","a+",encoding='utf-8') 7 file.write(str(e)) 8 file.close() 9 finally: 10 print("我還是會執行的呀呀呀呀呀")
打印出來的結果是:我還是會執行的呀呀呀呀呀
再例如:
1 import os 2 try: 3 os.rmdir("Alisa/vict") 4 except Exception as e: 5 print("你犯的錯是{0}".format(e)) 6 file=open("error.txt","a+",encoding='utf-8') 7 file.write(str(e)) 8 file.close() 9 else: 10 print("我還是會執行的呀呀呀呀呀")
打印出來的結果是:我還是會執行的呀呀呀呀呀
以上,第四部分到此結束~