Python3文件操作-基本操作

目錄

1:獲取open函數及返回實例的幫助文檔

2:open函數的定義及參數說明

2.1:open函數定義及返回值:

2.2:參數說明

2.3:參數組合

2.4:示例

3:文件對象常用方法

4:with open 語法


Python3中對文件的讀寫操作使用open函數來完成。

1:獲取open函數及返回實例的幫助文檔

print(help(open))
for item in dir(open('t.txt','w')):
    print(item)

2:open函數的定義及參數說明

2.1:open函數定義及返回值:

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None);

其返回值是一個可迭代對象;

2.2:參數說明

參數 參數值 說明
mode 'r' open for reading (default);
只讀模式,如果文件不存在,返回異常FileNotFoundError。返回的文件位置在開頭
'w'

open for writing, truncating the file first;

覆蓋寫模式,文件不存在就創建,文件存在就清空原文件;

'x'

create a new file and open it for writing;

創建寫模式,文件不存在就創建,文件存在就返回異常FileExistsError

'a'

open for writing, appending to the end of the file if it exists;

追加寫模式,文件不存在就創建,文件存在就在文件最後追加內容。返回的文件位置在結尾。

'b'

binary mode

二進制文件模式

't'

text mode (default)

文本文件模式,默認值

'+'

open a disk file for updating (reading and writing)

與r/w/x/a一起使用,在原功能基礎上增加同時讀寫功能。

'U' universal newline mode (deprecated)
encoding  

表示存儲文件的編碼;

當讀的時候,使用此編碼把磁盤文件中的內容解碼之後,寫入內存中;

當寫的時候,使用此編碼把內存中的內容編碼之後,寫入磁盤文件中;

如果爲空其默認值爲下面語句的輸出:

import locale
print(locale.getpreferredencoding(False))

2.3:參數組合

  't' (默認爲t) 'b' '+'
'r'

rt 或(r)

 

rb

r+ :在滿足r的基礎上(文件要存在),增加寫的功能,在文件的開頭寫

rb+:讀寫的是二進制文件;

'w' w wb

w+:首先滿足w(不存在創建,存在清空),再增加讀的功能

wb+:

'x' x xb

x+:滿足x(不存在創建,存在異常),增加讀功能

xb+:

'a' a ab

a+:a的基礎之上增加讀的功能

ab+:

2.4:示例

# encoding=gbk

#1: r:讀文件,文件不存在拋出FileNotFoundError異常
f = open('test.txt','r')  # 光標在第一行
print(f.readline())   # 光標下移一行
print(f.read())       # 讀取剩下的
print(f.read())       # 再讀就爲空
print(f.read())       # 再讀就爲空
print('*'*60)
f.seek(0)   #  光標定位到0,可重新讀
print(f.read())
f.close()
print('--1--','*'*60)
#2: r+:可讀寫;首先讀文件,文件不存在拋出FileNotFoundError異常;
# 讀之前寫,會覆蓋
f = open('test.txt','r+')
f.write('1234') # 直接寫會覆蓋 光標爲0開始的4個字符
print(f.read())  # 從光標處開始讀(此處爲3)
f.close()

#讀之後寫, 寫到文件末尾
f = open('test.txt','r+')
print(f.read(1)) # 在寫之前進行讀操作,後面的寫操作會在文件的末尾
f.write('1234') # 寫在文件的末尾,光標在文件末尾
print('[',f.read(),']')  # 這裏的讀爲空
# f.seek(0)
# print('[',f.read(),']')
f.close()
print('--2--','*'*60)
# 3:w: 文件不存在就創建,文件存在就清空
f = open('test.txt','w')
f.write('1233455')
f.close()

print('--3--','*'*60)
# 4:w+: 可讀寫,,文件不存在就創建,文件存在就清空;
f = open('test.txt','w+')
f.write('1233455') # 光標在文件末尾
print(f.read())   # 光標在文件末尾,讀的內容爲空
f.seek(0)  # 光標在文件開頭
print('[',f.read(),']')  # 光標在文件末尾
f.write('888')  #  在文件末尾寫
f.seek(0)   # 光標在文件開頭
f.write('999') # 從光標處覆蓋
f.close()
print('--4--','*'*60)


# 5:a:文件不存在就創建,文件存在就在末尾寫
f = open('test.txt','a')   # 光標在文件末尾
f.write('1233455')
f.close()

print('--5--','*'*60)
# 6:a+:可讀寫,文件不存在就創建,存在就在文件末尾寫
f = open('test.txt','a+')   # 光標在文件末尾
print(f.read())    # 光標在文件末尾,讀的結果爲空。
f.write('123345599')  # 在文件末尾寫
f.seek(0)   # 光標在文件開頭
print(f.read())
f.seek(0)   # 光標在文件開頭
f.write('8888888')    # 在文件末尾寫,與光標沒關係
f.close()

# 二進制模式 b,與上面的文本模式是一樣的操作,

3:文件對象常用方法

函數名稱 說明
read(size=-1, /)  讀字符個數,省略或者爲負時讀到文件結尾
readline(size=-1, /)  讀一行,size省略或者爲負時讀到文件結尾;size小於一行的字符個數時,返回size個字符
readlines(hint=-1, /) 讀所有的行,hint省略或者爲負時讀到所有的行,hint爲正數時表示讀取總的字符個數。
seek(offset[,whence]) 將文件打操作標記移到offset的位置。這個offset一般是相對於文件的開頭來計算的,一般爲正數。但如果提供了whence參數就不一定了,whence可以爲0表示從頭開始計算,1表示以當前位置爲原點計算。2表示以文件末尾爲原點進行計算。需要注意,如果文件以a或a+的模式打開,每次進行寫操作時,文件操作標記會自動返回到文件末尾。
 
write(str) 把str寫到文件中,write()並不會在str後加上一個換行符
writelines(seq) 把seq的內容全部寫到文件中(多行一次性寫入)。這個函數也只是忠實地寫入,不會在每行後面加上任何東西。
truncate([size]) 把文件裁成規定的大小,默認的是裁到當前文件操作標記的位置。如果size比文件的大小還要大,依據系統的不同可能是不改變文件,也可能是用0把文件補到相應的大小,也可能是以一些隨機的內容加上去。
close()  關閉文件。python會在一個文件不用後自動關閉文件,不過這一功能沒有保證,最好還是養成自己關閉的習慣。 如果一個文件在關閉後還對其進行操作會產生ValueError
flush() 把緩衝區的內容寫入硬盤

4:with open 語法

在open打開文件之後,在處理完文件時,需要調用close對文件進行關閉。open打開文件返回的文件對象,是可迭代對象,同時

它也支持上下文管理協議(即對象有__enter__()和__exit__()這兩個方法),因此可以使用with 語句來操作,它隱式地調用close方法。

例子:

# encoding=gbk
# 1:讀取所有行;不需要調用f.close()
with open('test.txt','r') as f:
    print(f.read())

# 2:一行一行讀
with open('test.txt','r') as f:
    for item in f:
        print(item)  # item 中有換行符,item[:-1] 可去掉最後一個字符

 

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