Python学习之==文件操作
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                Python学习之==文件操作
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                1、打開文件的模式
1 r,只讀模式(默認)【不可寫;文件不存在,會報錯】 2 w,只寫模式【不可讀;不存在則創建;存在則刪除內容】 3 a,追加模式【不可讀;不存在則創建;存在則追加內容】 4 r+,讀寫模式【可讀、可寫、可追加,如果打開的文件不存在的話,會報錯】 5 w+,寫讀模式【使用w+的話,已經存在的文件內容會被清空,可以讀到已經寫的文件內容】 6 a+,追加讀寫模式【不存在則創建;存在則只追加內容;】2、文件基本操作
1 # 打開文件(python默認字符集為utf-8,windows為gbk,所以要指定encoding='utf-8'),不輸入模式默認為r模式 2 m = open('words',encoding='utf-8') 3 print(m.read()) # 讀文件 4 print(m.readline()) # 讀取第一行 5 print(m.readlines()) # 把文件的每一行放到一個list里面3、文件操作方法
1 f = open('words','r+',encoding='utf-8') # encoding參數可以指定文件的編碼 2 f.readline() # 讀一行 3 f.readable() # 判斷文件是否可讀 4 f.writable() # 判斷文件是否可寫 5 f.encoding # 打印文件的編碼 6 f.read() # 讀取所有內容,大文件時不要用,因為會把文件內容都讀到內存中,內存不夠的話,會把內存撐爆 7 f.readlines() # 讀取所有文件內容,返回一個list,元素是每行的數據,大文件時不要用,原因和上面一樣 8 f.tell() # 獲取當前文件的指針指向 9 f.seek(0) # 把當前文件指針指向哪 10 f.write('愛情證書') # 寫入內容 11 f.flush() # 寫入文件后,立即從內存中把數據寫到磁盤中 12 f.truncate() # 清空文件內容 13 f.writelines(['愛情證書','孫燕姿']) # 將一個列表寫入文件中 14 f.close() # 關閉文件4、大文件讀取高效操作方法
用上面的read()和readlines()方法操作文件的話,會先把文件所有內容讀到內存中,這樣的話,內存數據一多,非常卡,高效的操作,就是讀一行操作一行,讀過的內容就從內存中釋放了,如下:
1 # 這樣的話,line就是每行文件的內容,讀完一行的話,就會釋放一行的內存 2 f = open('words',encoding='utf-8') 3 for line in f: 4 print(line)5、文件指針
1 # 用來記錄文件讀到哪里 2 # a模式的文件指針是在末尾的 3 m = open('name','a+',encoding='utf-8') 4 m.write('呃呃呃') 5 m.seek(0) # 移動文件指針到最前面 6 print(m.read()) 7 m.write('呵呵呵') # 移動完文件指針之后,從前面開始讀,但寫的時候還是在文件末尾寫 8 m.seek(0) 9 print(m.read())6、自動關閉文件
在操作文件的時候,經常會忘了關閉文件。可以使用with,它會在使用完這個文件句柄之后,自動關閉該文件,使用方式如下:
1 # 打開一個文件,把這個文件的句柄付給f 2 with open('file.txt', 'r') as f: 3 for line in f: 4 print(line) 5 6 # 這是多文件的操作,打開兩個文件,fr是讀file.txt,fw是新建一個file_bak文件 7 with open('file.txt') as fr,open('file_bak', 'w') as fw: 8 for line in fr: # 循環file.txt中的每一行 9 fw.write(line) # 寫到file_bak文件中7、修改文件
修改文件有兩種方式:
- 一種是把文件的全部內容都讀到內存中,然后把原有的文件內容清空,重新寫新的內容
 - 第二種是把修改后的文件內容寫到一個新的文件中
 
第一種方式:
1 with open('words','r+',encoding='utf-8') as fr: 2 res = fr.read() # 讀出文件中的全部內容 3 new_res = res.replace('花','flower') # 將'花'替換成'flower' 4 fr.seek(0) # 將文件指針指向文件最開頭 5 fr.truncate() # 清空文件 6 fr.write(new_res) # 將替換后的內容寫入文件第二種方式:
1 # 這個是多文件的操作,打開兩個文件,fr是讀file.txt,fw是新建一個file_bak文件 2 import os 3 with open('file') as fr,open('new_file','w') as fw: 4 for line in fr: # 循環file.txt中的每一行 5 new_line = line.replace('花','flower') 6 fw.write(new_line) # 寫到file_bak文件中 7 os.remove('file') # 刪除文件 8 os.rename('new_file','file') # 改名8、f.write()和f.writelines()
1 # f.write()只能寫字符串 2 a = ['abc\n','123\n','!@#'] 3 f = open('name','w') 4 for i in a: 5 f.write(i) 6 7 # f.writelines()會循環把list當中的元素寫入文件 8 a = ['abc\n','123\n','!@#'] 9 f = open('name','w') 10 f.writelines(a)9、練習
(1)隨機產生手機號,輸入多少個就產生多少個
import random start_num = '1387691' f = open('test.txt','w',encoding='utf-8') num = input('請輸入要產生的手機號個數:') for i in range(int(num)):random_num = str(random.randint(1,9999)) # 隨機產生一個1-9999的數字new_num = random_num.zfill(4) # 不夠四位,前面補0phone_num = start_num + new_numf.write(phone_num + '\n') f.close()(2)監控日志,一分鐘讀一次日志文件,如果一分鐘之內訪問博客的IP地址超過50次,就把這個IP記錄下加入黑名單
1 # 分析: 2 #打開日志文件 3 #把ip地址拿出來 4 #判斷每一個ip出現的次數,如果大于50次,記錄下來,加入黑名單 5 #每分鐘讀一次 6 import time 7 point = 0 8 while True: 9 all_ips = [] #存放所有的IP地址 10 f = open('access.log',encoding='utf-8') 11 f.seek(point) #移動文件指針 12 for line in f: #直接循環一個文件對象,每次循環的是文件的一行 13 ip = line.split()[0] #拿到IP地址 14 all_ips.append(ip) #把它存入數組當中 15 point = f.tell() #記錄指針位置 16 all_ip_set = set(all_ips) 17 for ip in all_ip_set: #循環集合當中的IP,沒有重復的 18 if all_ips.count(ip) > 50: #判斷的是數組當中的IP 19 print('攻擊的ip是:%s'%ip) 20 f.close() 21 time.sleep(2)轉載于:https://www.cnblogs.com/L-Test/p/8983190.html
總結
以上是生活随笔為你收集整理的Python学习之==文件操作的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 使用XmlTextReader 读取XM
 - 下一篇: 为什么使用 XML