python3速查參考- python基礎 5 -> 經常使用的文件操做

 文件的打開方式


 

打開方式 詳細釋義
r  以只讀方式打開文件。文件的指針會放在文件的開頭。這是默認模式。
rb  以二進制只讀方式打開一個文件。文件指針會放在文件的開頭。
r+  以讀寫方式打開一個文件。文件指針將會放在文件的開頭。(讀取文件時,只能讀,不能新建,若是文件沒有,則會異常報錯)
rb+  以二進制讀寫方式打開一個文件。文件指針會放在文件的開頭。
w  以寫入方式打開一個文件。若是該文件已存在,則將其覆蓋。若是該文件不存在,則建立新文件
wb  以二進制寫入方式打開一個文件。若是該文件已存在,則將其覆蓋。若是該文件不存在,則建立新文件
w+  以讀寫方式打開一個文件。若是該文件已存在,則將其覆蓋。若是該文件不存在,則建立新文件
wb+  以二進制讀寫方式打開一個文件。若是該文件已存在,則將其覆蓋。若是該文件不存在,則建立新文件
a  以追加方式打開一個文件。若是該文件已存在,文件指針將會放在文件尾,新的內容會寫入到已有內容以後,若是該文件不存在,則建立新文件來寫入
ab  以二進制追加方式打開一個文件。若是該文件已存在,文件指針將會放在文件尾,新的內容會寫入到已有內容以後,若是該文件不存在,則建立新文件來寫入
a+  以讀寫方式打開一個文件,若是該文件已存在,文件指針將會放在文件尾,新的內容會寫入到已有內容以後,若是該文件不存在,則建立新文件來寫入
ab+  以二進制追加方式打開一個文件。若是該文件已存在,文件指針將會放在文件尾,新的內容會寫入到已有內容以後,若是該文件不存在,則建立新文件來寫入

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

文件的讀操做


 

示例:java

 1 print("->文件句柄的獲取,讀操做:")
 2 
 3 f = open('無題','r',encoding='utf8') #此行做用就是獲取文件句柄
 4 d = f.read()    #read方法讀取文件全部內容
 5 f.close()
 6 print(d)
 7 
 8 print('->例二:')
 9 f = open('無題','r',encoding='utf8')
10 e = f.read(9)   #read方法中索引表示讀取字符數
11 f.close()
12 print(e)
13 #python3中,文件中一箇中英文都佔位1

運行結果:python

->文件句柄的獲取,讀操做:
昨夜星辰昨夜風
畫樓西畔桂堂東
身無綵鳳雙飛翼
心有靈犀一點通
->例二:
昨夜星辰昨夜風
畫

 

文件的寫操做


 

知識點:app

    1. 寫操做前,文件先格式化清空文件函數

    2.清空操做,在執行open的w方法後,清空spa

1 print("寫的操做,寫文件的時候,不能調用讀方法,讀文件的時候,不能調用寫方法")
2 
3 f = open('python','w',encoding='utf8')
4 f.write("I must learn python \nbecause, python is important \n")
5 f.write("java is better?")
6 f.write("maybe") #上面的語句,沒有加換行符,因此輸出的內容是緊接的
7 f.close()

運行結果:unix

打開文件後顯示以下指針

I must learn python 
because, python is important 
java is better?maybe

 

文件的append方法


 

語法格式:code

f = open('文件名''a','encoding = utf8')

文件這種方法爲追加模式:1, 空白文件中,直接從頭開始寫入內容; 2 有內容的文件,會在末尾開始繼續寫入內容對象

示例:blog

f = open('python','a',encoding='utf8')
f.write("花開又花落")
f.close()

運行結果:

I must learn python 
because, python is important 
java is better?maybe花開又花落

 

readline 和 readlines


 readline是逐行讀取

readlines是全文讀取


 

示例1 readline示例:

# -*-  coding:utf-8 -*-
'''
實際的工做中,使用的方法幾乎爲readline方法
'''
print("readline方法")
f = open('無題','r',encoding='utf-8')
a = f.readline()    #讀取一行內容
print("此時光標位置:",f.tell())
b = f.readline()    #繼續讀取一行內容
print("此時光標位置:",f.tell())
print(a.strip())  #strip是字符串方法中去除空格和換行的方法
print(b.strip())

 

運行結果:

readline方法
此時光標位置: 23
此時光標位置: 46
昨夜星辰昨夜風
畫樓西畔桂堂東

 

我讀取的文件內容原件:

 

昨夜星辰昨夜風
畫樓西畔桂堂東
身無綵鳳雙飛翼
心有靈犀一點通
南京
江蘇
中國

 


 

示例2 文件內容的遍歷示例:

#遍歷文件,在第四行打印分割線,而後繼續循環
count = 0
f = open('無題','r',encoding='utf-8')
for line in f:
    if count == 3:
        print('%%%%####%%%%')
        count+=1
        continue
    print(line.strip())
    count+=1
f.close()

 

運行結果:

昨夜星辰昨夜風
畫樓西畔桂堂東
身無綵鳳雙飛翼
%%%%####%%%%
南京
江蘇
中國

 

 


示例3 readlines方法:

print("readlines方法,會將每行的內容組成一個列表打印")
f = open('無題','r',encoding='utf8')
c = f.readlines()
print(c)
print(id(c))
print(id(f))
for i in c:
    print(i.strip())
print("遍歷方法")
f.seek(0) #將文件指針設置到初始位置,就是文件開頭
for i in f:
    print(i.strip())
f.close()  #文件的操做中,close()方法必定不能忘記

 

運行結果:

readlines方法,會將每行的內容組成一個列表打印
['昨夜星辰昨夜風\n', '畫樓西畔桂堂東\n', '身無綵鳳雙飛翼\n', '心有靈犀一點通\n', '南京\n', '江蘇\n', '中國']
38154568
3902272
昨夜星辰昨夜風
畫樓西畔桂堂東
身無綵鳳雙飛翼
心有靈犀一點通
南京
江蘇
中國
遍歷方法
昨夜星辰昨夜風
畫樓西畔桂堂東
身無綵鳳雙飛翼
心有靈犀一點通
南京
江蘇
中國

 

 

 

文件的tell() 和 seek()方法


 示例:

f = open('無題','r',encoding='utf8')
f.read(4)
print('當前光標位置',f.tell())

f.seek(10)
print('當前光標位置',f.tell())
f.close()

#read時,一箇中文算三個字符

運行結果:

當前光標位置 12
當前光標位置 10

 

文件操做之flush方法


 

import sys,time

for i in range(20):
    sys.stdout.write("#")
    sys.stdout.flush()
    time.sleep(1)

 

truncate方法


 

f = open('test','w')
f.write("hello")
f.write("\n")
f.write("python")
f.flush() #這樣不用執行close方法,內存中的數據,就會寫入到disk
f.close()

f = open('test','a')
f.truncate(2)  #截斷方法,光標從2開始日後截取
f.close()

 

 文件經常使用的方法彙總以下:

#-- 文件基本操做  
    output = open(r'C:\spam', 'w')          # 打開輸出文件,用於寫  
    input = open('data', 'r')               # 打開輸入文件,用於讀。打開的方式能夠爲'w', 'r', 'a', 'wb', 'rb', 'ab'等  
    fp.read([size])                         # size爲讀取的長度,以byte爲單位  
    fp.readline([size])                     # 讀一行,若是定義了size,有可能返回的只是一行的一部分  
    fp.readlines([size])                    # 把文件每一行做爲一個list的一個成員,並返回這個list。其實它的內部是經過循環調用readline()來實現的。若是提供size參數,size是表示讀取內容的總長。  
    fp.readable()                           # 是否可讀  
    fp.write(str)                           # 把str寫到文件中,write()並不會在str後加上一個換行符  
    fp.writelines(seq)                      # 把seq的內容所有寫到文件中(多行一次性寫入)  
    fp.writeable()                          # 是否可寫  
    fp.close()                              # 關閉文件。  
    fp.flush()                              # 把緩衝區的內容寫入硬盤  
    fp.fileno()                             # 返回一個長整型的」文件標籤「  
    fp.isatty()                             # 文件是不是一個終端設備文件(unix系統中的)  
    fp.tell()                               # 返回文件操做標記的當前位置,以文件的開頭爲原點  
    fp.next()                               # 返回下一行,並將文件操做標記位移到下一行。把一個file用於for … in file這樣的語句時,就是調用next()函數來實現遍歷的。  
    fp.seek(offset[,whence])                # 將文件打操做標記移到offset的位置。whence能夠爲0表示從頭開始計算,1表示以當前位置爲原點計算。2表示以文件末尾爲原點進行計算。  
    fp.seekable()                           # 是否能夠seek  
    fp.truncate([size])                     # 把文件裁成規定的大小,默認的是裁到當前文件操做標記的位置。  
    for line in open('data'):   
        print(line)                         # 使用for語句,比較適用於打開比較大的文件  
    open('f.txt', encoding = 'latin-1')     # Python3.x Unicode文本文件  
    open('f.bin', 'rb')                     # Python3.x 二進制bytes文件  
    # 文件對象還有相應的屬性:buffer closed encoding errors line_buffering name newlines等  
相關文章
相關標籤/搜索