文章目錄
- 目錄:
- 前言:
- 1、Python判斷文件是否存在的幾種方法:
- 1.1、使用os模塊
- 1.2、使用Try語句(比較嚴謹的寫法)
- 1.3、使用pathlib模塊
- 2、Python中寫入List到文本中并換行的方法
- 3、Python按行讀取文件的幾種簡單實現方法
- 3.1、readline()
- 3.2、fileinput
- 3.3、readlines()
- 3.4、文件迭代器
- 4、Python在一個文件中追加文件內容
- 5、Python去掉字符串中空格的幾種方法
- 6、Python實現定時任務
- 7、python 刪除非空文件夾
目錄:
前言:
雖然之前自學了些Python基礎,但是一段時間沒用再加上學的時間也比較短,搞的現在重拾Python寫代碼的時候,總要去查一些API(還是Coding不夠,仍需多加實踐),但整個過程又比較耗時。所以就準備把之前以及以后遇到的一些常用的功能Demo給記錄下來,方便自己后來查看。此文章會不定時一直更新。
1、Python判斷文件是否存在的幾種方法:
通常在讀寫文件之前,需要判斷文件或目錄是否存在,不然某些處理方法可能會使程序出錯。所以最好在做任何操作之前,先判斷文件是否存在。
這里將介紹三種判斷文件或文件夾是否存在的方法,分別使用os模塊、Try語句、pathlib模塊
1.1、使用os模塊
os模塊中的os.path.exists()方法用于檢驗文件是否存在。
- 判斷文件或文件夾是否存在
import os
os.path.exists(test_file.txt)
#Trueos.path.exists(no_exist_file.txt)
#False
其實這種方法還是有個問題,假設你想檢查文件“test_data”是否存在,但是當前路徑下有個叫“test_data”的文件夾,這樣就可能出現誤判。為了避免這樣的情況,可以這樣:
- 只檢查文件
import os
os.path.isfile("test-data")
通過這個方法,如果文件”test-data”不存在將返回False,反之返回True。
即是文件存在,你可能還需要判斷文件是否可進行讀寫操作。
1.2、使用Try語句(比較嚴謹的寫法)
可以在程序中直接使用open()方法來檢查文件是否存在和可讀寫。
語法:
open()
如果你open的文件不存在,程序會拋出錯誤,使用try語句來捕獲這個錯誤。
程序無法訪問文件,可能有很多原因:
如果你open的文件不存在,將拋出一個FileNotFoundError的異常;
文件存在,但是沒有權限訪問,會拋出一個PersmissionError的異常。
其實沒有必要去這么細致的處理每個異常,上面的這兩個異常都是IOError的子類。所以可以將程序簡化一下:
try:f =open()f.close()
except IOError:print "File is not accessible."
使用try語句進行判斷,處理所有異常非常簡單和優雅的。而且相比其他不需要引入其他外部模塊。
1.3、使用pathlib模塊
pathlib模塊在Python3版本中是內建模塊,但是在Python2中是需要單獨安裝三方模塊。
使用pathlib需要先使用文件路徑來創建path對象。此路徑可以是文件名或目錄路徑。
- 檢查路徑是否存在
path = pathlib.Path("path/file")
path.exist()
- 檢查路徑是否是文件
path = pathlib.Path("path/file")
path.is_file()
2、Python中寫入List到文本中并換行的方法
f.writelines(lists) 是不換行的寫入,可用以下方法在寫入時換行。
方法一:
for line in lists:f.write(line+'\n')
方法二:
lists=[line+"\n" for line in lists]
f.writelines(lists)
方法三:
f.write('\n'.join(lists))
3、Python按行讀取文件的幾種簡單實現方法
3.1、readline()
file = open("sample.txt")
while 1:line = file.readline()if not line:breakpass # do something
file.close()
一行一行得從文件讀數據,顯然比較慢;不過很省內存;測試讀10M的sample.txt文件,每秒大約讀32000行;
3.2、fileinput
import fileinput
for line in fileinput.input("sample.txt"):pass
寫法簡單一些,不過測試以后發現每秒只能讀13000行數據,效率比上一種方法慢了兩倍多;
3.3、readlines()
file = open("sample.txt")
while 1:lines = file.readlines(100000)if not lines:breakfor line in lines:pass # do something
file.close()
用同樣的數據測試,它每秒可以讀96900行數據!效率是第一種方法的3倍,第二種方法的7倍!
3.4、文件迭代器
每次只讀取和顯示一行,讀取大文件時應該這樣:
file = open("sample.txt")
for line in file:pass # do something
file.close()
4、Python在一個文件中追加文件內容
剛開始用的如下的write()方法,發下會先把原文件的內容清空再寫入新的東西,文件里面每次都是最新生成的一個賬號
mobile = Method.createPhone()
file = r'D:\test.txt'
with open(file, 'w+') as f:f.write(mobile)
查了資料,關于open()的mode參數(對于open方法來說本身就可以創建一個文件不需要重新new一個對象):
'r':讀'w':寫'a':追加'r+' == r+w(可讀可寫,文件若不存在就報錯(IOError))'w+' == w+r(可讀可寫,文件若不存在就創建)'a+' ==a+r(可追加可寫,文件若不存在就創建)對應的,如果是二進制文件,就都加一個b就好啦:'rb' 'wb' 'ab' 'rb+' 'wb+' 'ab+'
發現方法用錯了,像這種不斷生成新賬號 增加寫入的,應該用追加‘a’
改為如下后,解決:
mobile = Method.createPhone()
file = r'D:\test.txt'
with open(file, 'a+') as f:f.write(mobile+'\n') #加\n換行顯示
5、Python去掉字符串中空格的幾種方法
- strip():把頭和尾的空格去掉
- lstrip():把左邊的空格去掉
- rstrip():把右邊的空格去掉
- replace(‘c1’,‘c2’):把字符串里的c1替換成c2。故可以用replace(’ ‘,’’)來去掉字符串里的所有空格
- split():通過指定分隔符對字符串進行切片,如果參數num 有指定值,則僅分隔 num 個子字符串
In[2]: a=' ddd dfe dfd efre ddd '
In[3]: a
Out[3]: ' ddd dfe dfd efre ddd '
In[4]: a.strip()
Out[4]: 'ddd dfe dfd efre ddd'
In[5]: a.lstrip()
Out[5]: 'ddd dfe dfd efre ddd '
In[6]: a.rstrip()
Out[6]: ' ddd dfe dfd efre ddd'
In[7]: a.replace(' ','')
Out[7]: 'ddddfedfdefreddd'
In[8]: a.split()
Out[8]: ['ddd', 'dfe', 'dfd', 'efre', 'ddd']
6、Python實現定時任務
threading的Timer:
threading模塊中的Timer能夠幫助實現定時任務,而且是非阻塞的。
比如每3秒打印一次helloworld:
def printHello(): print "Hello World" t = Timer(2, printHello) t.start() if __name__ == "__main__": printHello()
7、python 刪除非空文件夾
一般刪除文件時使用os庫,然后利用os.remove(path)即可完成刪除,如果刪除空文件夾則可使用os.removedirs(path)即可,
但是如果需要刪除整個文件夾,且文件夾非空時使用os.removedirs(path)就會報錯了,此時可以使用shutil庫,該庫為python內置庫,是一個對文件及文件夾高級操作的庫,可以與os庫互補完成一些操作,如文件夾的整體復制,移動文件夾,對文件重命名等
import os
import shutilos.remove(path) #刪除文件
os.removedirs(path) #刪除空文件夾shutil.rmtree(path) #遞歸刪除文件夾
參考:
http://www.spiderpy.cn/blog/detail/28
https://www.cnblogs.com/SheilaSun/p/4380933.html
https://www.cnblogs.com/feiyueNotes/p/7897064.html
https://www.cnblogs.com/zywscq/p/5325604.html
https://blog.csdn.net/xiaodongxiexie/article/details/77155864