python基礎-10-文件操作

1.文件的輸入輸出

#1.打開文件 open 函數
open(file,[option])
#file 是要打開的文件
#option是可選擇的參數,常見有 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是可選的數值,指定字符串長度,如果沒有指定size或者指定爲負數,就會讀取並返回整個文件。當文件大小爲當前機器內存兩倍時就會產生問題,反之就儘可能大的size讀取和返回數據,如果到了文件末尾,會返回空字符串。
'''
>>> f.read(2)
'aa'

f.readline() #從文件中讀取單獨一行。
'''字符串結尾會自動加上一個換行符\n,只有當文件最後沒有以換行符結尾時,這一操作纔會被忽略,這樣返回值就不會有混淆。如果返回空字符串,表示到達率文件末尾,如果是空行,就會描述爲\n,一個只有換行符的字符串。
'''
>>> f.readline()
'aaabbb\n'
>>> f.readline()
'人生苦短,我用Python'


f.readlines() #一次讀取所有,返回一個列表,列表的元素爲文件行的內容。
'''可以通過列表索引的方式將文件的每一行的內容輸出。
可以通過for循環迭代輸出每一行的信息。'''
>>> 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()
#在讀寫模式下,當寫完的數據想要讀取出來時,要先緩存區的內容保存到文件當中。

f.close() 
#關閉文件。對一個已經關閉的文件進行操作會報錯。


#6.光標位置
f.tell()            #返回光標在文件中的位置。
>>> f.tell()   #查看當前,光標所在位置
28

f.seek(offset,from) #常用 f.seek(0) 返回起始位置
>>> f.seek(0)  #漢字佔用兩個字節,英文一個字節
0

#在文件中移動文件指針,從from(0代表起始位置,1代表當前位置,2代表文件末尾)偏移offset個字節。
# 常用 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 形式打開文件,裏面的語句執行完後會自動關閉文件
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中發生exception1異常時執行
except (exception2,exception3):
    suite3          #如果測試語句suite1中發生元組中任意異常時執行
except exception4 as reason:    #as把異常的原因賦值給reason
    suite4          #如果測試語句suite1發生exception4的異常時執行
except:
    suite5          #如果測試語句suite1發生異常在所列出的異常之外時執行
else:
    suite5          #如果測試語句塊suite1中沒有發生異常時執行
finally:
    suit6          #不管測試語句suite1中又沒有發生異常都會執行

'''
注意:中間的except,else,finally都是可選的,但至少有一個,不然try就沒有意義了,根據實際中的需求來選擇。
所有錯誤類型都繼承自BaseException
https://docs.python.org/3/library/exceptions.html#exception-hierarchy
'''
'''
#coding:
try:
    b%d
##except NameError:#參數未定義
##except TypeError:#類型錯誤
except Exception:#異常基類,捕捉所有的異常
    print("報錯了")
else:#代碼沒有報錯會執行
    print("沒有錯誤")
finally:#不管報不報錯,都會執行
    print("不管你報不報錯,我都要執行")
a=1
'''
#注意:如果拋出父類異常,在子類不會再獲取,如下:
try:
    fun()
except Exception as e:
    raise Exception
except ImportError as e:
    raise ImportError
finally:
    pass

'''
在上面的例子中,下面的ImportError就不會被拋出,應爲ImportError繼承Exception,但是可以把Exception放在後面是可以的
e可以得到系統給出的報錯信息
'''
'''
try:
    a=input("輸入數字:")
    if a.isdigit():
        print()
    else:
        raise TypeError
except Exception:#異常基類,捕捉所有的異常
    print("你輸入錯誤")
'''
assert #斷言
'''
測試表示式,其返回值爲假,就會觸發異常
'''

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
'''
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章