python-文件操作(2)

本文內容涉及python中的os模塊和os.path模塊的常用操作,這兩個模塊提供了與平臺和操作系統無關的文件系統訪問方法。os模塊負責大部分的文件系統操作,包括:刪除文件、重命名文件、遍歷目錄樹等;os.path模塊提供了一些針對路徑名的操作,包括:獲取文件和子目錄信息,文件路徑查詢等。

1. os模塊

remove(path) 刪除文件
rename(src,dst) 重命名文件
renames(old,new) 遞歸重命名目錄或文件
walk(top,topdown=True,οnerrοr=None,followlinks=False) 返回指定目錄下每次遍歷的路徑名、目錄列表、文件列表,top爲指定的頂層目錄,topdown表示自頂向下遍歷,onerror指定異常函數,followlinks是否遞歸遍歷鏈接文件。
chdir(path) 改變當前工作目錄
listdir(path) 列出指定目錄的文件和目錄
getcwd() 返回當前工作目錄
mkdir(path,mode=0o777) 創建目錄
makedirs(path,mode=0o777) 遞歸創建目錄
rmdir(path) 刪除目錄
removedirs(path) 遞歸刪除目錄

實例代碼:

>>> import os
>>> os.listdir('.')
[]
>>> os.mkdir('test1')
>>> os.makedirs('test2/test21/test211')
>>> os.listdir('.')
['test2', 'test1']
>>> os.listdir('./test2')
['test21']
 
>>> open('test.txt','w')
<open file 'test.txt', mode 'w' at 0x7faa26f69930>
>>> os.listdir('.')
['test2', 'test1', 'test.txt']
>>> os.remove('test.txt')
>>> os.listdir('.')
['test2', 'test1']
>>> os.getcwd()
'/home/alexzhou/study_workspace/python/test'
>>> os.chdir('./test1')
 
>>> os.getcwd()
'/home/alexzhou/study_workspace/python/test'
>>> os.rename('test1','test3')
>>> os.listdir('.')
['test2', 'test3']
 
>>> os.renames('test2/test21/test211','test1/test11/test111')
>>> os.listdir('.')
['test1', 'test3']
>>> os.listdir('test1')
['test11']
>>> os.listdir('test1/test11')
['test111']
 
>>> open('test3/test.txt','w')
<open file 'test3/test.txt', mode 'w' at 0x7faa26f69930>
>>> for top,dirs,files in os.walk('.'):
...     print 'top:',top
...     print 'dirs:',dirs
...     print 'files:',files
... 
top: .
dirs: ['test1', 'test3']
files: []
top: ./test1
dirs: ['test11']
files: []
top: ./test1/test11
dirs: ['test111']
files: []
top: ./test1/test11/test111
dirs: []
files: []
top: ./test3
dirs: []
files: ['test.txt']
 
>>> os.remove('test3/test.txt')
>>> os.rmdir('test3')
>>> os.listdir('.')
['test1']
>>> os.removedirs('test1/test11/test111')
>>> os.listdir('.')
[]

2. os.path模塊

basename(path) 去掉目錄路徑,返回文件名
dirname(path) 去掉文件名,返回目錄路徑
join(*path) 將分離的各部分組合成一個路徑名
split(path) 返回(dirname(),basename())元組
splitdrive(path) 返回(drivename,pathname)元組
splitext(path) 返回(filename,extension)元組
exists(path) 指定文件或目錄是否存在
isabs(path) 指定路徑是否是絕對路徑
isdir(path) 指定路徑是否存在且是一個目錄
isfile(path) 指定路徑是否存在且是一個文件
islink(path) 指定路徑是否存在且是一個符號鏈接
samefile(path1,path2) 兩個路徑名是否指向同一個文件

實例代碼:

>>> os.path.basename('/home/zhoujianghai/study_workspace/python/test_file.py')
'test_file.py'
>>> os.path.dirname('/home/zhoujianghai/study_workspace/python/test_file.py')
'/home/zhoujianghai/study_workspace/python'
 
>>> os.path.join('home','zhoujianghai','study_workspace')
'home/zhoujianghai/study_workspace'
 
>>> os.path.split('/home/zhoujianghai/study_workspace/python/test_file.py')
('/home/zhoujianghai/study_workspace/python', 'test_file.py')
>>> os.path.splitdrive('/home/zhoujianghai/study_workspace/python/test_file.py') 
('', '/home/zhoujianghai/study_workspace/python/test_file.py')
 
>>> os.path.splitext('/home/zhoujianghai/study_workspace/python/test_file.py')
('/home/zhoujianghai/study_workspace/python/test_file', '.py')
 
>>> os.path.samefile('../test_file.py','../test_file.py')
True
>>> os.path.exists('../test_file.py')
True

下面是統計指定目錄下文件數和代碼行數的小例子,發現是不是特別簡單呢~~
import sys,os  
 
def count_file_lines(filepath):  
    ret = 0 
    f = open(filepath,"r")  
    for lines in f:  
        if lines.split():  
            ret += 1 
    return ret
 
if __name__ == '__main__':  
    top = './' 
    total_lines = 0 
    total_files = 0 
    for root,dirs,files in os.walk(top):  
        for filename in files:  
            ext = os.path.splitext(filename)[-1] 
            if ext in ['.py']:  
                filepath = root + os.sep + filename
                total_files += 1 
                total_lines += count_file_lines(filepath)  
 
    print 'Total lines:',total_lines 
    print 'Total files: ',total_files


轉載請註明來自:Alex Zhou,本文鏈接:http://codingnow.cn/python/377.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章