日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

Python学习之==文件操作

發(fā)布時(shí)間:2023/12/10 python 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python学习之==文件操作 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1、打開(kāi)文件的模式

1 r,只讀模式(默認(rèn))【不可寫;文件不存在,會(huì)報(bào)錯(cuò)】 2 w,只寫模式【不可讀;不存在則創(chuàng)建;存在則刪除內(nèi)容】 3 a,追加模式【不可讀;不存在則創(chuàng)建;存在則追加內(nèi)容】 4 r+,讀寫模式【可讀、可寫、可追加,如果打開(kāi)的文件不存在的話,會(huì)報(bào)錯(cuò)】 5 w+,寫讀模式【使用w+的話,已經(jīng)存在的文件內(nèi)容會(huì)被清空,可以讀到已經(jīng)寫的文件內(nèi)容】 6 a+,追加讀寫模式【不存在則創(chuàng)建;存在則只追加內(nèi)容;】

2、文件基本操作

1 # 打開(kāi)文件(python默認(rèn)字符集為utf-8,windows為gbk,所以要指定encoding='utf-8'),不輸入模式默認(rèn)為r模式 2 m = open('words',encoding='utf-8') 3 print(m.read()) # 讀文件 4 print(m.readline()) # 讀取第一行 5 print(m.readlines()) # 把文件的每一行放到一個(gè)list里面

3、文件操作方法

1 f = open('words','r+',encoding='utf-8') # encoding參數(shù)可以指定文件的編碼 2 f.readline() # 讀一行 3 f.readable() # 判斷文件是否可讀 4 f.writable() # 判斷文件是否可寫 5 f.encoding # 打印文件的編碼 6 f.read() # 讀取所有內(nèi)容,大文件時(shí)不要用,因?yàn)闀?huì)把文件內(nèi)容都讀到內(nèi)存中,內(nèi)存不夠的話,會(huì)把內(nèi)存撐爆 7 f.readlines() # 讀取所有文件內(nèi)容,返回一個(gè)list,元素是每行的數(shù)據(jù),大文件時(shí)不要用,原因和上面一樣 8 f.tell() # 獲取當(dāng)前文件的指針指向 9 f.seek(0) # 把當(dāng)前文件指針指向哪 10 f.write('愛(ài)情證書') # 寫入內(nèi)容 11 f.flush() # 寫入文件后,立即從內(nèi)存中把數(shù)據(jù)寫到磁盤中 12 f.truncate() # 清空文件內(nèi)容 13 f.writelines(['愛(ài)情證書','孫燕姿']) # 將一個(gè)列表寫入文件中 14 f.close() # 關(guān)閉文件

4、大文件讀取高效操作方法

用上面的read()和readlines()方法操作文件的話,會(huì)先把文件所有內(nèi)容讀到內(nèi)存中,這樣的話,內(nèi)存數(shù)據(jù)一多,非常卡,高效的操作,就是讀一行操作一行,讀過(guò)的內(nèi)容就從內(nèi)存中釋放了,如下:

1 # 這樣的話,line就是每行文件的內(nèi)容,讀完一行的話,就會(huì)釋放一行的內(nèi)存 2 f = open('words',encoding='utf-8') 3 for line in f: 4 print(line)

5、文件指針

1 # 用來(lái)記錄文件讀到哪里 2 # a模式的文件指針是在末尾的 3 m = open('name','a+',encoding='utf-8') 4 m.write('呃呃呃') 5 m.seek(0) # 移動(dòng)文件指針到最前面 6 print(m.read()) 7 m.write('呵呵呵') # 移動(dòng)完文件指針之后,從前面開(kāi)始讀,但寫的時(shí)候還是在文件末尾寫 8 m.seek(0) 9 print(m.read())

6、自動(dòng)關(guān)閉文件

在操作文件的時(shí)候,經(jīng)常會(huì)忘了關(guān)閉文件。可以使用with,它會(huì)在使用完這個(gè)文件句柄之后,自動(dòng)關(guān)閉該文件,使用方式如下:

1 # 打開(kāi)一個(gè)文件,把這個(gè)文件的句柄付給f 2 with open('file.txt', 'r') as f: 3 for line in f: 4 print(line) 5 6 # 這是多文件的操作,打開(kāi)兩個(gè)文件,fr是讀file.txt,fw是新建一個(gè)file_bak文件 7 with open('file.txt') as fr,open('file_bak', 'w') as fw: 8 for line in fr: # 循環(huán)file.txt中的每一行 9 fw.write(line) # 寫到file_bak文件中

7、修改文件

修改文件有兩種方式:

  • 一種是把文件的全部?jī)?nèi)容都讀到內(nèi)存中,然后把原有的文件內(nèi)容清空,重新寫新的內(nèi)容
  • 第二種是把修改后的文件內(nèi)容寫到一個(gè)新的文件中

第一種方式:

1 with open('words','r+',encoding='utf-8') as fr: 2 res = fr.read() # 讀出文件中的全部?jī)?nèi)容 3 new_res = res.replace('','flower') # 將'花'替換成'flower' 4 fr.seek(0) # 將文件指針指向文件最開(kāi)頭 5 fr.truncate() # 清空文件 6 fr.write(new_res) # 將替換后的內(nèi)容寫入文件

第二種方式:

1 # 這個(gè)是多文件的操作,打開(kāi)兩個(gè)文件,fr是讀file.txt,fw是新建一個(gè)file_bak文件 2 import os 3 with open('file') as fr,open('new_file','w') as fw: 4 for line in fr: # 循環(huán)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()會(huì)循環(huán)把list當(dāng)中的元素寫入文件 8 a = ['abc\n','123\n','!@#'] 9 f = open('name','w') 10 f.writelines(a)

9、練習(xí)

(1)隨機(jī)產(chǎn)生手機(jī)號(hào),輸入多少個(gè)就產(chǎn)生多少個(gè)

import random start_num = '1387691' f = open('test.txt','w',encoding='utf-8') num = input('請(qǐng)輸入要產(chǎn)生的手機(jī)號(hào)個(gè)數(shù):') for i in range(int(num)):random_num = str(random.randint(1,9999)) # 隨機(jī)產(chǎn)生一個(gè)1-9999的數(shù)字new_num = random_num.zfill(4) # 不夠四位,前面補(bǔ)0phone_num = start_num + new_numf.write(phone_num + '\n') f.close()

(2)監(jiān)控日志,一分鐘讀一次日志文件,如果一分鐘之內(nèi)訪問(wèn)博客的IP地址超過(guò)50次,就把這個(gè)IP記錄下加入黑名單

1 # 分析: 2 #打開(kāi)日志文件 3 #把ip地址拿出來(lái) 4 #判斷每一個(gè)ip出現(xiàn)的次數(shù),如果大于50次,記錄下來(lái),加入黑名單 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) #移動(dòng)文件指針 12 for line in f: #直接循環(huán)一個(gè)文件對(duì)象,每次循環(huán)的是文件的一行 13 ip = line.split()[0] #拿到IP地址 14 all_ips.append(ip) #把它存入數(shù)組當(dāng)中 15 point = f.tell() #記錄指針位置 16 all_ip_set = set(all_ips) 17 for ip in all_ip_set: #循環(huán)集合當(dāng)中的IP,沒(méi)有重復(fù)的 18 if all_ips.count(ip) > 50: #判斷的是數(shù)組當(dāng)中的IP 19 print('攻擊的ip是:%s'%ip) 20 f.close() 21 time.sleep(2)

轉(zhuǎn)載于:https://www.cnblogs.com/L-Test/p/8983190.html

總結(jié)

以上是生活随笔為你收集整理的Python学习之==文件操作的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。