Matlab和Python操作檔案路徑的一些函式的比較
阿新 • • 發佈:2018-12-23
轉自:http://blog.sina.com.cn/s/blog_4513dde60100o6mv.html
Python作為一個用途廣泛的語言,提供了不少用於操作目錄和檔案路徑的方法。而Matlab雖然一開始是為了數學運算而設計的,但是同樣提供了不少操作路徑的函式,因為數學運算也少不了要和檔案打交道。下面列出Matlab和Python中功能相同或相似的操作路徑的方法,相信對於需要同時使用Matlab和Python的技術人員而言,有一些的作用。下面的討論都是基於Python2.6.4和Matlab7.7。
(1) filesep - os.path.sep
filesep是Matlab的一個函式,用於返回當前平臺的目錄分隔符,Windows是\,Linux是/。在Python中對應物為os.path.sep,但它不是一個函式,而是一個字串。(2) fullfile - os.path.join
Matlab函式fullfile用於將若干個字串連線成一個完整的路徑,如Matlab幫助文件中的例子:f = fullfile('C:', 'Applications', 'matlab', 'myfun.m')
f =
C:\Applications\matlab\myfun.m
其在Python中的對應物為os.path.join函式,例如:
>>> os.path.join('c:\\', 'lab', 'test.py')
'c:\\lab\\test.py'
但是在Windows平臺下os.path.join和Matlab函式fullfile的行為有些許不同,例如,我們用上面Matlab例子中的路徑給os.path.join:
>>> os.path.join('C:', 'Applications', 'matlab', 'myfun.m')
'C:Applications\\matlab\\myfun.m'
比較fullfile和os.path.join的結果,發現os.path.join的結果中C:後面沒有新增分隔符\。這並不是os.path.join的bug,而是它考慮了Windows中C:與C:\的區別:"C:\"表示C盤,而"C:"表示當前目錄,例如
C:\LAB>cd c:book
C:\LAB\book>
和下面的例子是等效的:
C:\LAB>cd .\book
C:\LAB\book>
(3) fileparts - os.path.split, os.path.splitext
Matlab函式filesep用於將一個完整的檔名分割為四個部分:路徑,檔名,副檔名,版本號。在Python中可以用os.path.split和os.path.splitext取得路徑,檔名,副檔名,至於版本號用哪個我不太清楚。(4) pathsep - os.path.sep
Matlab函式pathsep返回當前平臺的路徑分隔符。Windows平臺為';',Linux為':'。在Python中的對應物為os.pathsep,但它不是一個函式而是一個字串。(5) exist - os.path.exists
實際上Matlab函式exist和Python的os.path.exists有很大的不同。之所以放在一起,是因為它們都可以用於判斷目錄或者檔案是否存在。Matlab函式exist的功能要複雜很多,不像os.paht.exists只返回True和False,exist函式的返回值為整數,不同的數值代表了不同的含義。詳情參閱Matlab help。(6) which - inspect.getsourcefile
Matlab函式which可以通過一個函式或指令碼名稱得到它的完整路徑。不僅如此,which還能處理函式過載的情況,例如:>> which abs(0)
built-in (D:\Program\MATLAB\R2008b\toolbox\matlab\elfun\@double\abs) % double method
>> which abs(single(0))
built-in (D:\Program\MATLAB\R2008b\toolbox\matlab\elfun\@single\abs) % single method
在Python中與之功能類似的函式是inspect.getsourcefile,例如:
>>> import random
>>> import inspect
>>> inspect.getsourcefile(random)
'D:\\Program\\Python26\\lib\\random.py'
(7) isdir - os.path.isdir
Matlab函式isdir和Python的os.path.isdir都用於判斷一個路徑是否代表了一個目錄。(8) dir - os.listdir
Matlab函式dir和os.listdir都用於列出一個目錄的內容,但兩者有區別。os.listdir的返回值為list型別,包含了目錄內檔案和目錄的名稱,而Matlab函式dir的返回值為結構體陣列型別,包含了如下的域:name:檔案或目錄的名稱;
date:修改日期
bytes:檔案大小
isdir:是否是目錄
datenum:修改日期
詳細用法參考Matlab help。