1 文件的操作
操作文件的整體過程(IO操作)
1. 打開或新建一個文件
2. 讀/寫數(shù)據(jù)
3. 關(guān)閉文件
打開文件
在PYTHON,使用OPEN函數(shù)可以打開或創(chuàng)建一個新文件
open(文件名,訪問模式)
例如:
F=open(‘test.txt’,’w’)
訪問模式 | 說明 |
r | 打開只讀文件,該文件必須存在(默認(rèn)模式)。 |
w | 打開只寫文件,若文件存在則文件長度清為0,即該文件內(nèi)容會消失。若文件不存在則建立該文件。 |
a | 以附加的方式打開只寫文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數(shù)據(jù)會被加到文件尾,即文件原先的內(nèi)容會被保留。 |
r+ | 打開可讀寫的文件,該文件必須存在。 |
w+ | 打開可讀寫文件,若文件存在則文件長度清為零,即該文件內(nèi)容會消失。若文件不存在則建立該文件。 |
a+ | 以附加方式打開可讀寫的文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數(shù)據(jù)會被加到文件尾后,即文件原先的內(nèi)容會被保留。 |
上述的形態(tài)字符串都可以再加一個b字符,如rb、w+b或ab+等組合,加入b字符用來告訴函數(shù)庫打開的文件為二進(jìn)制文件,而非純文字文件。不過在POSIX系統(tǒng),包含Linux都會忽略該字符。文件分為文本文件和二進(jìn)制文件(PDF,WORD,圖片)
關(guān)閉文件COLSE
例1
f=open("test.txt",'w') #在當(dāng)前路徑(相對路徑)創(chuàng)建文件
f=open("d:\test.txt",'w') #在某個路徑(絕對路徑)創(chuàng)建文件
f.close()
文件的讀寫
文件的寫:write()
文件的讀:read([參數(shù)]) 參數(shù)表示讀多少個字節(jié)
例1:
f=open("test.txt",'w') #在當(dāng)前路徑(相對路徑)創(chuàng)建文件
#f=open("d:\test.txt",'w') #在某個路徑(絕對路徑)創(chuàng)建文件
f.write("hello world")
f.close()
例2:
f=open("test.txt",'r')
content=f.read()#形參為空表示讀全部內(nèi)容
#content=f.read(5)#形參5表示讀5個字節(jié)內(nèi)容
print(content)
f.close()
讀數(shù)據(jù)(readlines)
就像read沒有參數(shù)時一樣,readlines可以按照行的方式把整個文件中的內(nèi)容一次性讀取并且返回的是一個列表,其中每一行的數(shù)據(jù)為一個元素。
讀數(shù)據(jù)(readline)
readline每次讀取一行數(shù)據(jù)
例3:文件的復(fù)制
source_file = "/home/arvin/python-3.7.2-amd64.exe"
dest_file = "copy-"+source_file[source_file.rfind("/")+1:] #復(fù)制到當(dāng)前目前,并重命> 名
print("目標(biāo)文件名:%s"%dest_file)
#打開文件
source_f = open(source_file,'rb')
dest_f = open(dest_file,'wb')
#讀取原始文件
content = source_f.read()
#把讀取的內(nèi)容寫到目標(biāo)文件
dest_f.write(content)
#關(guān)閉文件
source_f.close()
dest_f.close
讀取文件時,定位的位置tell()
定位到某個位置seek(offset,from)
n Offset:偏移量
n From方向
0表示文件開頭
1表示當(dāng)前位置
2表示文件末尾
In [1]: ls
01-for.py 03-name.py 04-for三角.py
In [2]: f=open("01-for.py",'rb') #打開文件
In [3]: c1=f.read(3) #讀取前3個字節(jié)
In [4]: c1
Out[4]: b"'''"
In [5]: post1=f.tell() #顯示位置
In [6]: post1
Out[6]: 3
In [7]: c2=f.read(10) #再讀取10個字節(jié)
In [9]: c2
Out[9]: b'
for i in '
In [10]: f.seek(0,0) #將讀取的位置設(shè)置為從0開始
Out[10]: 0
OS模塊
OS模塊包含普遍的操作系統(tǒng)功能,與平臺無關(guān),常用命令如上:
1. os.name()——判斷現(xiàn)在正在使用的平臺,WINDOWS返回NT,linux返回POSIX
2. os.rename(需要修改的文件名,新的文件名),也可以做剪切
3. os.getcwd——當(dāng)前的工作目錄
4. os.listdir()——指定所有目錄下所有的文件和目錄名,以列表的形式全部列舉出來,沒有區(qū)分目錄和文件
5. os.remove——刪除指定文件
6. os.rmdir()——刪除指定目錄,該目錄不能為空
7. os.mkdir()——創(chuàng)建目錄,只能建立一層,遞歸建立可用os.makedirs()
8. os.path.isfile()——判斷指定對象是否為文件。是返回TRUE,否則FALSE
9. os.path.isdir()——判斷指定對象是否為 目錄。是返回TRUE,否則FALSE
10. os.path.exists()——檢驗(yàn)指定的對象是否存在。是返回TRUE,否則FALSE
11. os.path.split()——返回路徑的目錄和文件名
In [30]: os.path.split("/home/arvin/python/01-for.py")
Out[30]: ('/home/arvin/python', '01-for.py')
12. os.getcwd()——獲取當(dāng)前工作的目錄
13. os.system()——執(zhí)行SHELL命令
14. os.chdir()——改變目錄到指定目錄
15. os.path.getsize()——獲得文件大小,如果為目錄,返回0
16. os.path.abspath()——獲得絕對路徑
17. os.path.join(path,name)——連接目錄和文件名
18. os.path.basename(path)——返回文件名
19. os.path.dirname(path)——返回文件所在目錄
例1, 批量重命名
import os
tpath="test"
sourcePath=os.path.abspath(tpath) #動態(tài)獲得絕對路徑
file_list=os.listdir(sourcePath)
for f in file_list:
source_file=os.path.join(sourcePath,f)
print('源名稱:%s'%source_file,end='')
dest_file=os.path.join(sourcePath,"re-"+f)
print(' 目標(biāo)名稱:%s'%dest_file)
os.rename(source_file,dest_file)
例2, 目錄的遞歸:
import os
def find_hello(parent_dir,file_name):
file_abspath=os.path.join(parent_dir,file_name) #當(dāng)前正在處理的文件或目錄的絕對路徑
#print(file_abspath)
if os.path.isdir(file_abspath): #判斷 當(dāng)前的文件是一個目錄
for f in os.listdir(file_abspath): #進(jìn)入目錄,列出目錄下所有文件列表
find_hello(file_abspath,f) #遞歸調(diào)用自己本身的函數(shù)
else:
if os.path.isfile(file_abspath) and file_abspath.endswith('.py'): #如果傳入的是文件,判斷文件是否以PY結(jié)尾
if read_and_find_hello(file_abspath): #讀取PY文件,查看是否包含HELLO
files_list.append(file_abspath)
def read_and_find_hello(py_file):
flag=False #定義一個標(biāo)記變量,初始為False
f=open(py_file,encoding='utf-8') #打開文件
with f:
line=f.readline() #讀其中一行
while line: #有內(nèi)容時進(jìn)行下一步循環(huán)
if 'hello' in line:
flag=True
break
line=f.readline()
return flag
files_list=[]
find_hello('d:\','python')
print(files_list)