python基礎-10-文件操作

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
'''
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,628評論 19 139
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,740評論 18 399
  • 定義類并創(chuàng)建實例 在Python中,類通過 class 關鍵字定義。以 Person 為例,定義一個Person類...
    績重KF閱讀 4,108評論 0 13
  • 在經過一次沒有準備的面試后,發(fā)現(xiàn)自己雖然寫了兩年的android代碼,基礎知識卻忘的差不多了。這是程序員的大忌,沒...
    猿來如癡閱讀 3,122評論 3 10
  • 根據(jù)某一對象的屬性去重
    麥子_KB閱讀 311評論 0 1

友情鏈接更多精彩內容