當前位置:首頁 » 編程語言 » python文件刪除一行

python文件刪除一行

發布時間: 2025-05-14 08:06:58

python刪除文件夾python刪除文件夾里的指定文件

1. 介紹1.1 介紹
今天小編帶著大家來學習Python讀寫文件的方法,雖然現階段做項目需要用到文件操作的情況不多了,但是免不了在特殊情況下還是需要用到這個技術的。
今天小編還會給大家講解Python創建、刪除、授權文件夾的方法,這個技術在控制台程序裡面用途是非常多的。
Python創建、刪除、授權文件夾以及讀寫文件是依靠os庫來實現的,而文件路徑則是通過os的path屬性對象的方法來處理的,我們來逐個介紹一下。
文件夾操作就是目錄操作,在Windows系統裡面文件夾叫folder,翻譯過來就是文件夾,在Linux系統裡面文件夾叫directory,翻譯過來就是目錄。所以創建、刪除、授權文件夾就是創建、刪除、授權目錄。
2. 基本原則
讀寫文件有一些常識需要大家先了解一下。
讀寫文件可以是本地電腦上面的文件,也可以是遠程網路上面的文件,只要授權了就可以操作。文件夾操作可以是本地電腦上面的文件夾,也可以是遠程網路上面的文件夾,只要授權了就可以操作。要創建文件需要對創建文件的文件夾有寫許可權。讀寫已經存在的文件只需要對文件有許可權。文件內容分為普通模式和二進制模式,普通模式通過字元串操作,二進制模式通過位元組操作。寫文件分為重置寫入和追加寫入,前者會清空已有內容,後者不會。通過文件指針可以精確控制讀寫文件內容的具體位置,但是寫入只會覆蓋已有內容而不會像編輯器一樣插入內容。當前文件夾通過「.」表示,上一級文件夾通過「..」表示。任何文件夾都會有「當前文件夾」和「上一級文件夾」。3. 文件夾
3.1 遞歸遍歷
遍歷文件夾用到os庫的walk方法,這個方法很方便,直接就把所有的子級、孫級的全部文件夾和文件都遍歷出來了。
rootDir=os.path.dirname(os.path.abspath(__file__))+"\\TFSE"forroot,dirs,filesinos.walk(rootDir):fordirindirs:print("文件夾:"+os.path.abspath(root+"\\"+dir))forfileinfiles:print("文件:"+os.path.abspath(root+"\\"+file))12345673.2 不遞歸遍歷
os的walk方法很簡單的解決了遍歷文件夾的問題,但是並不是任何情況下我們都需要把文件夾裡面的子級、孫級全部都找出來的,這時候就用到了os的另外一個方法listdir了。
通過os的listdir可以像PHP那樣只遍歷一層目錄下面的內容,可以通過os.path的isdir、isfile方法判斷路徑是文件夾還是文件。
rootDir=os.path.dirname(os.path.abspath(__file__))+"\\TFSE"files=os.listdir(rootDir)forfiinfiles:fullPath=os.path.abspath(rootDir+"\\"+fi)ifos.path.isfile(fullPath):print("文件:"+fullPath)elifos.path.isdir(fullPath):print("文件夾:"+fullPath)1234567893.3 普通遍歷
既然os的listdir可以遍歷一層目錄,通過遞歸函數也就可以遍歷所有子級、孫級的目錄了。方法和上一課的PHP一樣,封裝一個函數,在函數裡面調用函數自己,實現遞歸。
rootDir=os.path.dirname(os.path.abspath(__file__))+"\\TFSE"deflistFolder(dir):files=os.listdir(dir)forfiinfiles:fullPath=os.path.abspath(dir+"\\"+fi)ifos.path.isfile(fullPath):print("文件:"+fullPath)elifos.path.isdir(fullPath):print("文件夾:"+fullPath)listFolder(fullPath)listFolder(rootDir)123456789101112133.4 創建
創建文件夾使用os的mkdir方法,創建之後可以通過os的chmod方法授權,通過os的chown方法設置角色。如果創建失敗(包括文件夾已經存在的情況)則會拋出異常。
需要注意的是os.chmod和os.chown只有在Linux操作系統裡面才能使用。
rootDir=os.path.dirname(os.path.abspath(__file__))+"\\TFSE"newDir=rootDir+"\\newFolder"os.mkdir(newDir)os.chmod(newDir,0755)os.chown(newDir,100,-1)1234563.5 刪除
刪除文件夾使用os的rmdir方法。
rootDir=os.path.dirname(os.path.abspath(__file__))+"\\TFSE"newDir=rootDir+"\\newFolder"os.rmdir(newDir)12343.6 遞歸刪除
如果文件夾含有子級文件/文件夾則需要先刪除子級項目才能刪除文件夾,這個時候就體現出os的walk方法的便捷了。
rootDir=os.path.dirname(os.path.abspath(__file__))+"\\TFSE"newDir=rootDir+"\\newFolder"forroot,dirs,filesinos.walk(newDir):fordirindirs:os.rmdir(root+"\\"+dir)forfileinfiles:os.unlink(root+"\\"+file)123456784. 文件4.1 創建
Python創建文件只有標准方式一種方法,就是通過open、close實現的。
4.1.1 open
使用open創建文件需要了解更多知識,首先我們需要指定「文件打開方式」這個概念,使用open實際上知識打開了一個文件,需要我們指定一個打開文件想要干什麼的模式,這個就是文件打開方式。
文件打開方式包括:
r,讀模式r+,可讀可寫模式,文件指針在文件開頭w,寫模式,重置文件內容w+,可讀可寫模式,重置文件內容a,寫模式,文件指針在文件末尾a+,可讀可寫模式,文件指針在文件末尾
rootDir=os.path.dirname(os.path.abspath(__file__))+"\\TFSE"newFile=rootDir+"\\newFile.py"fo=open(newFile,"w")iffo:writeLen=fo.write("這是福哥新創建的文件")fo.close()12345674.2 刪除
刪除文件使用os的unlink方法。
rootDir=os.path.dirname(os.path.abspath(__file__))+"\\TFSE"newFile=rootDir+"\\newFile.py"os.unlink(newFile)12344.3 讀文件
讀文件就是以讀模式或者讀寫模式打開文件。
4.3.1 open
使用open讀文件需要用到while語句通過readline循環讀取。
rootDir=os.path.dirname(os.path.abspath(__file__))+"\\TFSE"newFile=rootDir+"\\newFile.py"fc=""fo=open(newFile,"r")iffo:whileTrue:line=fo.readline()ifnotline:breakfc+=linefo.close()1234567891011124.4 寫文件
寫文件就是以寫模式或者讀寫模式打開文件。
4.4.1 open
使用open寫文件需要用到write方法。
rootDir=os.path.dirname(os.path.abspath(__file__))+"\\TFSE"newFile=rootDir+"\\newFile.py"fo=open(newFile,"w")iffo:fo.write("福哥說這是全部內容了")fo.close()fc=""fo=open(newFile,"r")iffo:whileTrue:line=fo.readline()ifnotline:breakfc+=linefo.close()print(fc).5 追加寫文件
有時候我們不想將文件內容全部重置了,需要在文件現有內容後面追加內容怎麼辦?
4.5.1 open
將文件打開方式設置為追加寫模式。
rootDir=os.path.dirname(os.path.abspath(__file__))+"\\TFSE"newFile=rootDir+"\\newFile.py"fo=open(newFile,"a")iffo:fo.write("福哥又說話了")fo.close()fc=""fo=open(newFile,"r")iffo:whileTrue:line=fo.readline()ifnotline:breakfc+=linefo.close()print(fc).6 文件指針
我們以可讀可寫模式打開文件後,通過seek移動文件指針,在指定位置進行讀寫操作,這種方式可以避免將文件全部內容載入到內存當中就可以完成很多情況的讀寫操作,可以解決針對超大文件內容的格式化數據的編輯的難題。
4.6.1 文件資料庫
舉例:我們製作一個文件資料庫,將用戶名和密碼存儲到一個文件裡面,用戶名和密碼格式如下
[用戶名(最長50個字元)][密碼(取MD5哈希串,所以固定32個字元)][換行]1然後我們只要保證每一組用戶信息都是一樣的固定長度就可以通過簡單計算知道某一個用戶ID對應的用戶信息在文件的哪個位置上面,進而通過fseek就可以快速定位並讀取用戶信息了。
因為我們規定了文件內的用戶數據格式,那麼通過操控文件指針就可以實現這個文本資料庫的增、刪、改、查功能了,是不是覺得很神奇?
4.6.2 文本資料庫定義
這是文本資料庫TFSimpleTextDb的定義。
classTFSimpleTextDb:rootDir=""fp=""fo=Nonefs=0lastUserId=0lastLoginUserId=0def__init__(self,rootDir):self.rootDir=rootDirself.fp=""self.fo=Noneself.fs=0self.lastUserId=0self.lastLoginUserId=0defstrPad(self,s,padLen,chr):strLen=len(s)padLen-=strLenforiinrange(0,padLen):s+=chrreturnsdefstrRepeat(self,chr,num):s=""foriinrange(0,num):s+=chrreturnsdefconn(self):self.fp=self.rootDir+"/users.tongfu.net.txt"#資料庫文件不存在就創建它ifnotos.path.exists(self.fp):withopen(self.fp,"w")asfo:fo.close()try:#打開資料庫文件self.fo=open(self.fp,"r+")#記得當前文件尺寸self.fs=os.path.getsize(self.fp)returnTrueexceptExceptionase:print(e)returnFalsedefadd(self,user,pwd):iflen(user)>50:returnfalse#移動文件指針到文件末尾self.fo.seek(self.fs)#寫入一行數據保存用戶名和密碼#用戶名用strpad補位,保證數據結構一致line="%s%s\n"%(self.strPad(user,50,''),md5(pwd).hexdigest())self.fo.write(line)self.fs+=len(line)#立即寫入新內容到磁碟self.fo.flush()#新用戶ID就是最新一行的行號self.lastUserId=int(self.fs/(50+32+1))returnTruedefmod(self,userId,pwd):#移動文件指針到指定userId對應的用戶信息位置self.fo.seek((50+32+1)*(userId-1))#按約定數據長度讀取數據欄位上的數據userInDb=(self.fo.read(50)).strip()pwdInDb=self.fo.read(32)ifuserInDb=="":returnFalse#修改密碼#後退32個字元,在密碼欄位開始處開始寫self.fo.seek(self.fo.tell()-32)self.fo.write(md5(pwd).hexdigest())#立即寫入新內容到磁碟self.fo.flush()returnTruedefdelete(self,userId):#移動文件指針到指定userId對應的用戶信息位置self.fo.seek((50+32+1)*(userId-1))#按約定數據長度讀取數據欄位上的數據userInDb=(self.fo.read(50)).strip()pwdInDb=self.fo.read(32)ifuserInDb=="":returnFalse#修改密碼#後退82個字元,在用戶名欄位開始處開始寫#寫入82個空字元表示用戶已經被刪除了self.fo.seek(self.fo.tell()-82)self.fo.write(self.strRepeat("",82))#立即寫入新內容到磁碟self.fo.flush()returnTruedeflogin(self,user,pwd=""):fo=open(self.fp,"r")iffo:whileTrue:#解析出用戶名和密碼userInDb=fo.read(50)ifnotuserInDb:breakpwdInDb=fo.read(32)ifnotpwdInDb:breakLF=fo.read(1)ifnotLF:breakuserInDb=userInDb.strip()#驗證用戶名ifuser==userInDb:#驗證密碼ifmd5(pwd).hexdigest()==pwdInDb:#計算登錄用戶IDself.lastLoginUserId=int(fo.tell()/(50+32+1))return0else:return1#密碼錯誤fo.close()return2#用戶名不存在defclose(self):self.fo.close()defgetLastUserId(self):returnself.(self):returnself..6.3 文本資料庫測試
下面是對這個TFSimpleTextDb的測試代碼。
myTFSimpleTextDb=TFSimpleTextDb(rootDir)myTFSimpleTextDb.conn()ifmyTFSimpleTextDb.login("福哥")==2:print("創建用戶福哥\n")myTFSimpleTextDb.add("福哥","123456")print(myTFSimpleTextDb.getLastUserId())ifmyTFSimpleTextDb.login("鬼穀子叔叔")==2:print("創建用戶鬼穀子叔叔\n")myTFSimpleTextDb.add("鬼穀子叔叔","abcdef")print(myTFSimpleTextDb.getLastUserId())ifmyTFSimpleTextDb.login("同福大哥")==2:print("創建用戶同福大哥\n")myTFSimpleTextDb.add("同福大哥","123456")print(myTFSimpleTextDb.getLastUserId())print("修改鬼穀子叔叔的密碼\n")print(myTFSimpleTextDb.mod(2,"123456"))print("使用新密碼登錄鬼穀子叔叔\n")print(myTFSimpleTextDb.login("鬼穀子叔叔","123456"))print(myTFSimpleTextDb.getLastLoginUserId())print("刪除鬼穀子叔叔\n")print(myTFSimpleTextDb.delete(2))print("再次登錄鬼穀子叔叔\n")print(myTFSimpleTextDb.login("鬼穀子叔叔","123456"))myTFSimpleTextDb.close(). 超大文件讀寫超大文件讀寫需要避免將文件裡面的內容全部讀出來放到變數里這種行為,因為變數都是存在於內存當中的,如果變數裡面的數據太多會把內存用光,就會導致系統癱瘓,這個太可怕了~~
5. 將一個10G文件里的「福哥」換成「鬼穀子叔叔」
這個時候我們可以通過開啟兩個文件指針,一個文件指針負責讀現有文件,一個文件指針負責寫新的臨時文件,完成後刪除現有文件,再將臨時文件重命名為原來的文件,就搞定了~~
rootDir=os.path.dirname(os.path.abspath(__file__))+"\\TFSE"newFile=rootDir+"\\newFile.py"tmpFile=rootDir+"\\newFile.py.tmp"foNew=open(newFile,"r")foTmp=open(tmpFile,"w")iffoNewandfoTmp:whileTrue:tmpLine=foNew.readline()ifnottmpLine:breaktmpLine=tmpLine.replace("福哥","鬼穀子叔叔")foTmp.write(tmpLine)foNew.close()foTmp.close()os.unlink(newFile)os.rename(tmpFile,newFile)fc=""withopen(newFile,"r")asfo:fc+=fo.readline()print(fc). 總結好了,今天童鞋們跟著福哥系統地將Python語言操作文件夾、操作文件的方法學習了一遍,有了這些技術之後,今後在項目當中處理各種有關文件夾/文件的問題就不會發怵了!
要注意一點哦,文件夾操作、文件操作屬於IO操作,是有一定風險的,一定不要把文件夾/文件的路徑搞錯了,要不把系統文件或者程序文件寫壞了,系統有可能就完蛋了~~

Ⅱ python刪除txt檔案的首行的空行

f=open(你的文件),得到文件句柄。
讀整個就是s= f.read()
你想去掉頭部那些空行,用s=s.lstrip()就能把字元串左邊那些空格換行通通去掉了。

Ⅲ 急求:如何用python刪除文本中的重復行

1.如果你的txt文件不大的話可以直接
tmp=open('**.txt').readlines()#把內容一次性全部讀取出來是一個列表
set(tmp)#這個就是把列表去重復
然後你可以把這個去重後的tmp寫入到新的文件
2.txt很大,那麼只能一行一行的讀取去重了
#!/usr/bin/envpython
#coding=utf-8
#python2.7
outfile=open('result-readline.txt','w')#新的文件
list_1=[]
forlineinopen('test.txt'):#老文件
tmp=line.strip()
iftmpnotinlist_1:
list_1.append(tmp)
outfile.write(line)
outfile.close()

Ⅳ python中刪除數據框某個行時,語法df.drop('列名',axis=1)中,使用axis=1,axis=1不是表示行么

<pre t="code" l="python">data.drop(n)可以刪除第i行
import pandas as pd
data=pd.DataFrame([[1,2,3],[4,5,6]])
print data.drop(0)輸出結果為 0 1 21 4 5 6

Ⅳ python程序出錯刪除一行代碼怎麼做

python程序出錯刪除一行的方法:

滑鼠左鍵按住不松選中需要刪除的那一行代碼,然後按一下鍵盤上面的delete按鈕,就可以將整行數據刪除了

示例如下:

結果如下:

更多Python知識,請關註:Python自學網!!

熱點內容
安徽新能源網路配置是什麼 發布:2025-05-14 10:06:24 瀏覽:630
pinode搭建伺服器 發布:2025-05-14 10:04:23 瀏覽:3
電腦伺服器ip名稱 發布:2025-05-14 10:01:09 瀏覽:748
connectorpython 發布:2025-05-14 09:48:50 瀏覽:763
配置不好怎麼辦 發布:2025-05-14 09:46:40 瀏覽:622
數據流程圖中的數據存儲是指 發布:2025-05-14 09:46:39 瀏覽:445
我的世界伺服器id前綴mod 發布:2025-05-14 09:45:53 瀏覽:830
完整後台網站源碼 發布:2025-05-14 09:45:46 瀏覽:455
傳奇祝福腳本 發布:2025-05-14 09:34:12 瀏覽:571
電腦文件加密的軟體 發布:2025-05-14 09:29:20 瀏覽:354