python 文件 及文件夾 操作

操作

r   以只讀方式打開文件。文件的指針將會放在文件的開頭。這是默認模式。
rb  以二進制格式打開一個文件用於只讀。文件指針將會放在文件的開頭。這是默認模式。

r+  打開一個文件用於讀寫。文件指針將會放在文件的開頭。
rb+ 以二進制格式打開一個文件用於讀寫。文件指針將會放在文件的開頭。

w   打開一個文件 只用於寫入 。如果該文件已存在則將其覆蓋。如果該文件不存在,創建新文件。
wb  以二進制格式打開一個文件只用於寫入。如果該文件已存在則將其覆蓋。如果該文件不存在,創建新文件。

w+  打開一個文件 用於讀寫。如果該文件已存在則將其覆蓋。如果該文件不存在,創建新文件。
wb+ 以二進制格式打開一個文件用於讀寫。如果該文件已存在則將其覆蓋。如果該文件不存在,創建新文件。

a   打開一個文件用於追加。如果該文件已存在,文件指針將會放在文件的結尾。也就是說,新的內容將會被寫入到已有內容之後。
    如果該文件不存在,創建新文件進行寫入。
	
ab  以二進制格式打開一個文件用於追加。如果該文件已存在,文件指針將會放在文件的結尾。
    也就是說,新的內容將會被寫入到已有內容之後。如果該文件不存在,創建新文件進行寫入。
	
a+  打開一個文件用於讀寫。如果該文件已存在,文件指針將會放在文件的結尾。文件打開時會是追加模式。
    如果該文件不存在,創建新文件用於讀寫。
	
ab+ 以二進制格式打開一個文件用於追加。如果該文件已存在,文件指針將會放在文件的結尾。如果該文件不存在,創建新文件用於讀寫。


總結:	有+ :讀寫 
		無+ :要麼讀要麼寫
		有b :二進制格式

文件

#寫入一個文件**
fo = open("foo.txt", "wb")
fo.write( "www.runoob.com!\nVery good site!\n");
 
#關閉打開的文件**
fo.close()
或者、
with open("foo.txt", "wb") as fo:    #這個不需要close
fo.write( "www.runoob.com!\nVery good site!\n");

#讀取一個文件**  
fo = open("foo.txt", "r+")
str = fo.read(10); #讀取10個字符
str = fo.readline(); #讀取一行
print "讀取的字符串是 : ", str

#查找當前位置**
position = fo.tell();
print "當前文件位置 : ", position

#把指針再次重新定位到文件開頭**
position = fo.seek(0, 0);
str = fo.read(10);
print "重新讀取字符串 : ", str

# 關閉打開的文件**
fo.close()

# 重命名文件test1.txt到test2.txt**
import os
os.rename( "test1.txt", "test2.txt" )

# 刪除一個已經存在的文件test2.txt**
os.remove("test2.txt")

# linecache使用:
print linecache.getline(”temp.txt“,4) 獲取第四行的內容
lines = linecahe.getlines(”temp.txt“)
print lines   得到一個list list的每個元素是每行內容

目錄

# 創建目錄test
	os.mkdir("test")

# 將當前目錄改爲"/home/newdir"
	os.chdir("/home/newdir")

# 給出當前的目錄
	print os.getcwd()

# 刪除”/tmp/test”目錄
	os.rmdir( "/tmp/test" )

文件夾操作

import os
os.path.isdir(參數)  #判斷是否是文件夾

查看一個當前文件的權限
	oct(os.stat('e.py').st_mode) #oct 轉成八進制 st_mode 十進制的權限

增加可執行權限 
	os.chmod('e.py',os.stat('e.py').st_mode | stat.S_IXUSR)

如何讀寫文本文件

文本文件編碼格式已知,在python2.x python3.x 中分別如何讀取該文件
解決方案:
    字符串的語義發生了變化:
        python 2 python3
        str bytes
        unicode str

    python 2.x 寫入文件前對unicode編碼,讀入文件後對二進制字符串編碼
    python 3.x open函數指定't'的文本模式,endcoding指定編碼格式

    python 2.x
        unicode 和 str 之間的轉換:
            s=u'你好'
            print s.encode('utf8') #將得到一個str的字符串
            print s.encode('gbk') 
            
            s2 = s.encode('utf8')
            print s2.decode('utf8') #解碼操作

        f = open('py2.txt','w') #以只寫的方式打開
        s= '你好'
        f.write(s.encode('gbk'))
        f.close()

        f = open('py2.txt','r')
        t = f.read()
        print t.decode('gbk')

    python 3.x
        bytes 字符串的表示 b'efjwefwief'
        unicode 字符串的表示 '你好' #和python 2.x 不同 python 2.x 需要加 u'你好' 表示unicode字符串
        open ('py3.txt','wt') #以t文本模式進行寫操作
        f = open('py3.txt','wt',endoding='utf8')

        f.write('你好,測試')
        f.close()

        f = open('py3.txt','rt',endoding='utf8')
        s = f.read()
        print(s)

如何處理二進制文件

使用python 分析一個wav文件頭部的信息,處理音頻數據
f = open('demo.wav','rb') #以二進制的模式進行打開文件

合併一個文件夾下所有文件的內容

import os
#使用遞歸去解決
def merge(folder_path):##習題2
	if not os.path.exists(folder_path):
		return 'not exists'
	for f in os.listdir(folder_path):
		file_path = os.path.join(folder_path,f)
		if os.path.isdir(file_path):
			merge(file_path)
		else:
			merge_file = open('/tmp/merge_test','ab+')
			content = open(file_path,'r').read()
			merge_file.write(content)
			merge_file.close()

merge('/tmp/5')

列出文件夾下面的所有文件

import os

rootdir = u'E:\python'
list = os.listdir(rootdir)
for i in range(0,len(list)):
	   path = os.path.join(rootdir,list[i])
	   if os.path.isfile(path) and path.find("~") == -1:
		   print path	

文件緩衝區

設置文件的緩衝文件的緩衝通常分爲:全緩衝,行緩衝,無緩衝        
在某些tty設備(比如終端設備)就是使用的行緩衝        
串口設備就是無緩衝        

如何設置python中文件對象的緩衝行爲?

解決方案:        
	全緩衝:open函數中的buffering設置爲大於1的整數n,n爲緩衝區大小;    
	行緩衝:open函數中的buffering設置爲1:    
	無緩衝:open函數中的buffering設置爲0    
		
	舉個栗子:    
		
	全緩衝:    
		a = open('demo.txt' , 'w' , buffering = 20)
		a.write('=' * 20)
		
	行緩衝:    
		a = open('demo.txt' , 'w' , buffering = 1)
		a.write(' 1234\n ')
		
	無緩衝:    
		a = open('demo.txt' , 'w' , buffering = 0)
		a.write('abcde')
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章