1.文件的輸入輸出
#1.打開文件 open 函數(shù)
open(file,[option])
#file 是要打開的文件
#option是可選擇的參數(shù),常見有 mode 等
#2.文件的打開模式
r 只讀模式,文件不存在時會報錯。
w 寫入模式,文件存在會清空之前的內容,文件不存在則會新建文件。
x 寫入模式,文件存在會報錯,文件不存在則會新建文件。
a 追加寫入模式,不清空之前的文件,直接將寫入的內容添加到后面。
b 以二進制模式讀寫文件,wb,rb,ab。
+ 可讀寫模式,r+,w+,x+,a+,這幾種模式還遵循了r,w,x,a的基本原則。
f=open("test.txt","r")
f=open("test.txt","w") #相對路徑
f=open("test.txt","x")
f=open(r"E:\learn\test.txt","w") #絕對路徑,r關鍵字轉義
f=open("E:\\learn\\test.txt","w") #絕對路徑 ,雙斜杠轉義
#3.文件的讀取
'''
#內容
aaabbb
人生苦短,我用Python
#編碼
f=open("test.txt","r+") #加上+號,可以讀的權限
f.read() #Python讀文件,讀完需要重置光標或者重新打開一次文件
'''
f.read(size) #讀取文件的內容,將文件的內容以字符串形式返回。
'''size是可選的數(shù)值,指定字符串長度,如果沒有指定size或者指定為負數(shù),就會讀取并返回整個文件。當文件大小為當前機器內存兩倍時就會產生問題,反之就盡可能大的size讀取和返回數(shù)據(jù),如果到了文件末尾,會返回空字符串。
'''
>>> f.read(2)
'aa'
f.readline() #從文件中讀取單獨一行。
'''字符串結尾會自動加上一個換行符\n,只有當文件最后沒有以換行符結尾時,這一操作才會被忽略,這樣返回值就不會有混淆。如果返回空字符串,表示到達率文件末尾,如果是空行,就會描述為\n,一個只有換行符的字符串。
'''
>>> f.readline()
'aaabbb\n'
>>> f.readline()
'人生苦短,我用Python'
f.readlines() #一次讀取所有,返回一個列表,列表的元素為文件行的內容。
'''可以通過列表索引的方式將文件的每一行的內容輸出。
可以通過for循環(huán)迭代輸出每一行的信息。'''
>>> f.readlines()
['aaabbb\n', '人生苦短,我用Python']
#4.文件的寫入
f.write() #將要寫入的內容以字符串的形式通過write方法寫入文件中。
'''
>>> f=open("test.txt","w+")
>>> f.write("test")
4
>>> f.flush()
'''
f.writelines() #括號里必須是由字符串元素組成的序列。
'''
>>> f=open("test.txt","w+")
>>> li=["life","is","short",",you","need","python"]
>>> f.writelines(li)
>>> f.flush()
>>> f.read()
''
>>> f.seek(0)
0
>>> f.read()
'lifeisshort,youneedpython'
'''
#5.保存和關閉
f.flush()
#在讀寫模式下,當寫完的數(shù)據(jù)想要讀取出來時,要先緩存區(qū)的內容保存到文件當中。
f.close()
#關閉文件。對一個已經關閉的文件進行操作會報錯。
#6.光標位置
f.tell() #返回光標在文件中的位置。
>>> f.tell() #查看當前,光標所在位置
28
f.seek(offset,from) #常用 f.seek(0) 返回起始位置
>>> f.seek(0) #漢字占用兩個字節(jié),英文一個字節(jié)
0
#在文件中移動文件指針,從from(0代表起始位置,1代表當前位置,2代表文件末尾)偏移offset個字節(jié)。
# 常用 f.seek(0,0) 返回起始位置。 其他了解一下
>>> f.seek(0,0) #回到起始位置
0
#7.查看文件信息
closed #查看文件是否已經關閉,返回布爾值。
>>> f.closed
False
mode #返回文件打開模式。
>>> f.mode
'w+'
name #返回文件名。
>>> f.name
'test.txt'
encoding #編碼格式
>>> f.encoding
'cp936'
#8.with 形式打開文件,里面的語句執(zhí)行完后會自動關閉文件
with open('文件名') as f:
f.read()
'''
#擴展操作
>>> with open("test.txt","w+") as f:
f.write("哈哈") #無需flush,自動關閉IO
2
'''
2.異常語法
#打開shell,按F1查看幫助文檔
try:
suite1 #測試語句塊
except exception1:
suite2 #如果測試語句suite1中發(fā)生exception1異常時執(zhí)行
except (exception2,exception3):
suite3 #如果測試語句suite1中發(fā)生元組中任意異常時執(zhí)行
except exception4 as reason: #as把異常的原因賦值給reason
suite4 #如果測試語句suite1發(fā)生exception4的異常時執(zhí)行
except:
suite5 #如果測試語句suite1發(fā)生異常在所列出的異常之外時執(zhí)行
else:
suite5 #如果測試語句塊suite1中沒有發(fā)生異常時執(zhí)行
finally:
suit6 #不管測試語句suite1中又沒有發(fā)生異常都會執(zhí)行
'''
注意:中間的except,else,finally都是可選的,但至少有一個,不然try就沒有意義了,根據(jù)實際中的需求來選擇。
所有錯誤類型都繼承自BaseException
https://docs.python.org/3/library/exceptions.html#exception-hierarchy
'''
'''
#coding:
try:
b%d
##except NameError:#參數(shù)未定義
##except TypeError:#類型錯誤
except Exception:#異?;?,捕捉所有的異常
print("報錯了")
else:#代碼沒有報錯會執(zhí)行
print("沒有錯誤")
finally:#不管報不報錯,都會執(zhí)行
print("不管你報不報錯,我都要執(zhí)行")
a=1
'''
#注意:如果拋出父類異常,在子類不會再獲取,如下:
try:
fun()
except Exception as e:
raise Exception
except ImportError as e:
raise ImportError
finally:
pass
'''
在上面的例子中,下面的ImportError就不會被拋出,應為ImportError繼承Exception,但是可以把Exception放在后面是可以的
e可以得到系統(tǒng)給出的報錯信息
'''
'''
try:
a=input("輸入數(shù)字:")
if a.isdigit():
print()
else:
raise TypeError
except Exception:#異常基類,捕捉所有的異常
print("你輸入錯誤")
'''
assert #斷言
'''
測試表示式,其返回值為假,就會觸發(fā)異常
'''
assert 1==1 #沒有返回值
assert 1==2 #返回AssertionError
'''
>>> assert 1>2 #斷言,如果返回False就會報錯
Traceback (most recent call last):
File "<pyshell#82>", line 1, in <module>
assert 1>2
AssertionError
'''