Python讀寫文件


一、讀寫文件方式

在當前python文件同級目錄下存在一個名為file的文件,內容如下

1、使用with open讀取文件

def read_file(filepath):
    with open(filepath) as fp:
        content=fp.read();
    return content
    
    
ret=read_file('file')
print(ret)

在上述腳本中可以發現,content作為一個列表,雖然在with open結構體內,但在with open結構體外也可以使用,但在方法內部定義的變量,在方法外部一般是不能訪問的,這在java中被稱為局部變量。

2、不使用with讀取文件

def read_file(filepath):
    fp=open(filepath)
    content=fp.readlines()
    fp.close()
    return content

ret=read_file('file')
print(ret)

通過對兩種讀取方式的對比發現,第一種方式比較簡潔,不用關心流是否關閉,with會在文件不再使用時自動關閉流,並且輸出的格式與文件內容中顯示的一致。第二種方式就必須要手動顯示的關閉流,且輸出格式與文件內容不同,需要進行特殊處理,且發生異常之后,可能會導致流未正常關閉。

對第二種方式輸出結果做處理,使其與文件內容一致,。readlines方法返回的為一個列表,故需要對類表進行遍歷,替換特殊符號

def read_file(filepath):
    str=""
    fp=open(filepath)
    content=fp.readlines()
    for c in content:
        str+=c.replace('\n','\n')
    fp.close()
    return str

ret=read_file('file')
print(ret)

實際使用中,建議使用第一種方式來讀寫文件內容,當文件不在當前python文件同級目錄時,可使用絕對路徑后者相對路徑來確定文件的位置

二、文件打開方式

open方法可以傳遞兩個參數,第一個參數為文件路徑,第二個參數為打開文件的方式,可選值為r/w/a/r+

r   只讀模式打開文件,如果為傳遞第二個參數,則默認為r

w  寫入模式打開文件

a  附加模式打開文件

r+ 讀取和寫入模式打開文件

1、只讀模式(如上述實例),如果文件不存在,則拋出No such file or directory的異常

2、寫入模式

 如果寫入的文件不存在,則會新建該文件,並且寫入內容,如果文件已存在,則會覆蓋文件之前內容,所以使用該方式時需要慎重,確定文件中之前內容被覆蓋是否影響當前業務邏輯。

def w_file(filepath):
    with open(filepath,'w') as wf:
        wf.write('today is a nice day\n')
        wf.write('do you want to take a trip.')
        

w_file('wfile.txt')

寫入模式只能寫入,不能讀取,若果在wf.write下面添加如下腳本,則會出現io.UnsupportedOperation: not readable的異常

content=wf.read()
print(content)

3、附加模式

def a_file(filepath):
    with open(filepath,'a') as af:
        af.write('nice day\n')
        af.write('good start.')
        
a_file('file')

4、讀寫模式

def rw_file(filepath):
    with open(filepath,'r+') as rwf:
        rwf.write('This is myfile.\n')
        rwf.write("The end.")
        content=rwf.read()
    return content

content=rw_file('myfile')
print(content)

與讀取模式相同,若文件不存在,也將拋出異常

在當前Python腳本所在同級目錄新建文件myfile,重新執行

 

通過上述控制台輸出及文件內容來看,控制台並未輸出任何內容,但要寫入的信息已經保存到文件中,這說明,在執行read時,信息還未被寫入文件。

如果該文件內容已存在,執行上述讀寫程序,是否能夠讀取到文件內容,來嘗試一下,保留上次myfile中內容,程序中向文件添加一行記錄,再次讀取之前文件內容

def rw_file(filepath):
    with open(filepath,'r+') as rwf:
        rwf.write("new append")
        content=rwf.read()
    return content

content=rw_file('myfile')
print(content)

可以看到,讀取的內容與原有文件內容不同,缺少了This is my字符,而文件中新添加的new append剛好填充了缺少的字符所在位置。

上述示例先寫入,再讀取,出現上述情況也是意料之中,那么如果先讀取之前文件,在寫入,是否就和預期一樣,讀取原有文件內容,並且添加新內容?

現在文件myfile內容如下

def rw_file(filepath):
    with open(filepath,'r+') as rwf:
        content=rwf.read()
        rwf.write('\nappend new line.\n')
        rwf.write("new end.\n")
    return content

content=rw_file('myfile')
print(content)

如上所示,答案是肯定的,先讀取出了原有內容,在原有內容基礎上添加了新內容。所以我們在使用的時候要注意讀取和寫入的順序。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM