一、python可以在不導入任何模塊的情況下對文件完成讀、寫、追加,替換(稍複雜)。
二、打開文件:
1、f = open('text.txt')
這種方式打開,操作完後需要使用f.colse()關閉。
2、with open('text.txt') as f:
這種方式打開,運行完系統自動關閉,回收內存。建議使用。
三、文件打開模式:
python操作文件的時候,默認是隻讀的,需要指定各種模式才能進行相應的操作,模式列表:
r | 以只讀方式打開文件 | r+ | 先讀,再寫模式 |
rb | 以二進制格式只讀打開,圖片,視頻等文件 | rb+ | 二進制格式,先讀再寫 |
a | 以追加格式打開f.write(),在最後一行追加,文件不存在,創建文件。 | a+ | 以讀寫格式打開f.write(),在最後一行追加,文件不存在,創建文件。 |
ab | 和a區別於,二進制 | ab+ | 和ab區別於,二進制 |
w | 寫模式創建新文件,覆蓋原文件,不可讀 | w+ | 寫讀模式,先寫再讀,創建新文件,覆蓋原文件 |
wb | 和w區別於,二進制 | wb+ | 和wb區別於,二進制 |
四、文件的常用方法:
f.read(num) | 默認讀取整個文件,num可以設置設取的數據的大小(英文字符個數) |
f.readlines(num) | 默認讀取整個文件,並以行爲分隔符,返回值是一個列表,每行爲一個元素 |
f.readline(num) | 每次運行讀取一行,最節省空間 |
f.write(str) | 向文件寫入數據,str必須是字符串類型。 |
f.tell() | 顯示當前指針位置,使用next()方法時不能使用tell() |
f.seek(num) | 設置指針位置,f.seek(0)文件開始, |
f.flush() | 強制把內存數據寫入到文件。默認程序運行結束才寫入 |
next(f) | 逐行讀取文件,f是打開的文件對象,不能與tell()同時用,一般迭代器用 print(read_file.tell()) |
f.close() | 關閉打開的文件,清除內存 |
例子1:
#假設文件test.txt內容如下 ''' 0=000 1=100 2=200 3=300 4=400 5=500 6=600 7=700 8=800 ''' #1# 最省空間,最快的讀取方式 # read_file.readline(),每運行一次,自動讀取下一行 with open('file_text1.text', 'r') as read_file: f = read_file.readline() while f: # 在條件判斷中,None和False都是False,其餘爲True,歡迎補充 print(f, end='') f = read_file.readline() # 注意end,因爲readline()讀取包含換行符,print默認也加空行符,所以會出現空一行 #2# 其它方法組合操作 with open('file_text1.text', 'r') as read_file: f = read_file.read(5) print(f) # 運行結果是0=000 print(read_file.tell()) # 當前位置是5 read_file.seek(22) # 將指針移動到22 print(read_file.readlines())# '=300\n' 從位置22開始以行爲元素,組成一個列表
例子2:
正常情況下,文件正常關閉時才把內存文件寫入,使用flush()可以把立即寫入文件。
使用with語句,只要跳出語句塊,自動關閉文件。
# input在with裏面 d = {} with open('file_text1.txt', 'w') as file: for i in range(20): file.write(str(i) + '=' + str(i)+'00\n') s=input('-----停止!文件未關閉,找不到file_text1.txt-----:') # 把input移動到with外面 d = {} with open('file_text1.txt', 'w') as file: for i in range(20): file.write(str(i) + '=' + str(i)+'00\n') s=input('-----停止!文件正常關閉,可以找到file_text1.txt-----:') # 使用flush(),可以打開'file_text1.txt',每行都會立即寫入 d = {} with open('file_text1.txt', 'w') as file: for i in range(20): file.write(str(i) + '=' + str(i)+'00\n') file.flush() s=input('-----停止!有文件,有內容-----:')
例子3:
修改文件:
文件只有讀,寫,追加,沒有修改方法。
如果要修改只能讀取到內存修改再覆蓋回去。
對於大文件,這種方法十分佔內存,可能會造成死機。
所以,按行讀取,修改後存入臨時文件,是一個好方法!
temp_file, source_file = 'temp_info.txt', 'info.txt' # 同時打開兩個文件 with open(temp_file, 'w', encoding='utf-8') as temp_file_write,\ open(source_file, 'r', encoding='utf-8') as file_read: file_read_line = file_read.readline() while file_read_line: temp_file_write.write(file_read_line) file_read_line = file_read.readline() # 然後再把上面的temp_file和suorce_file換個位置,寫回去就好了,是不是發現點什麼?仔細思考吧:)