python文件操作可讀、可寫、可讀可寫 a+ w+ r+

python文件操作可讀、可寫、可讀可寫 a+ w+ r+ 

# encoding:utf-8
# 文件讀取操作 20200701
fp=open("E:\\file.txt","r",encoding="utf-8" )
data_read=fp.read()#一次性全部讀完
fp.seek(0,0)#遊標移動到第一行,繼續讀,否則讀取到的是空
data_readlines=fp.readlines()
fp.close()
print(data_readlines)
print(data_read)
# 練習:統計文件中一行存在test的行數
# 注:文件讀取的時候,行的末尾包含回車換行符號\n
# 如果文件很大用readlines讀取,小文件直接用read讀取,read讀取的是整個文件內容,readlines結果是list
count=0
fp=open("e:\\file.txt","r",encoding="utf-8")
lines=fp.readlines()
for i in lines:
    if "test" in i:
        print(i)
        count+=1
print(count)
# read() readlines() readline()的區別
# read()—當成一個字符串讀出
# readlines()readlines返回的是列表
# readline()一行一行讀文件
# 如果文件很大,用read()內存不夠(如運維日誌幾十G)
# 用readline來讀超大文件
#原則:內存在電腦中是個稀缺的資源,如果你佔用大量內存,程序肯定不是最優的,小文件:read、readlines速度更快些

模式
w+:先清空所有文件內容,然後寫入,然後你纔可以讀取你寫入的內容
r+:不清空內容,可以同時讀和寫入內容。 寫入文件的最開始
a+:追加寫,所有寫入的內容都在文件的最後

# a+
fp=open("e:\\file.txt","a",encoding="utf-8")
fp.write("hello python")
fp.close()
fp=open("e:\\file.txt","r",encoding="utf-8")
data=fp.read()
fp.close()
print(data)
w+
#此時不需要關閉文件,w+ 可讀可寫(清空再寫),文件不存在就創建,r+可讀可寫不存在報錯
fp=open("e:\\file.txt","w+",encoding="utf-8")
fp.write("hello python")
fp.seek(0,0)
data=fp.read()
fp.close()
print(data)
#此時不需要關閉文件,a+ 可讀可寫(末尾追加再寫),文件不存在就創建,r+可讀可寫不存在報錯
fp=open("e:\\file.txt","a+",encoding="utf-8")
fp.write("\nhello python1")#\n用來換行
fp.seek(0,0)
data=fp.read()
fp.close()
print(data)
# 關於open()的mode參數:
# 'r':讀
# 'w':寫
# 'a':追加
# 'r+' == r+w(可讀可寫,文件若不存在就報錯(IOError))
# 'w+' == w+r(可讀可寫,文件若不存在就創建)
# 'a+' ==a+r(可追加可寫,文件若不存在就創建)
# 對應的,如果是二進制文件,就都加一個b就好啦:
# 'rb'  'wb'  'ab'  'rb+'  'wb+'  'ab+'


seek(offset,whence)
seek()
offset:座標  正數表示從前向後    負數表示從後向前    0表示
最開始的遊標
whence:0,1,2 0表示從文件最開始位置,0,0
1:表示從當前位置開始,基於當前的相對位置,來重置座標。
10   seek(5,1) 10-->5,現在的座標是15
2:表示從文件的末尾開始,做相對位置,來重置座標
   seek(-5,2)-->末尾向前數5個字符。
注意;:1和2使用基於rb模式
注意:這個文件指針的改變只是作用於'r',對'w'和'a'不會起作用,如果是'w',
那麼write()永遠都是從開頭寫(會覆蓋後面對應位置的內容),是'a'的話write()就永遠都是從最後開始追加。

fp=open("e:\\file.txt","rb")
data=fp.readlines()
print(fp.tell())
fp.seek(-8,1)
data1=fp.readlines()
fp.close()
print("data:",data)
print("data1:",data1)

 

 

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