Matlab和Python操作文件路径的一些函数的比较

转自: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。

(9) cd - os.chdir

Matlab函数cd用于切换当前工作目录。Python中的对应物为os.chdir。IPython中可以直接用cd。

(10) pwd - os.getcwd

Matlab函数pwd返回当前工作目录的路径,Python中对应物为os.getcwd。在IPython中可直接用pwd。

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
最短路径问题是计算网络中两点之间最短路径的问题。在MatlabPython中都有相应的实现方式。 在Matlab中,可以使用Graph Theory Toolbox中的函数来实现最短路径问题。具体实现步骤如下: 1. 构造图。使用graph函数构造一个图,其中输入参数为节点数和边列表。 2. 计算最短路径。使用shortestpath函数计算两个节点之间的最短路径。 以下是一个示例代码: ``` % 构造图 n = 5; edges = [1 2; 1 3; 2 3; 2 4; 3 4; 4 5]; G = graph(edges(:,1), edges(:,2), ones(size(edges,1),1), n); % 计算最短路径 start_node = 1; end_node = 5; [shortest_dist, shortest_path] = shortestpath(G, start_node, end_node); % 输出结果 disp('最短路径距离:'); disp(shortest_dist); disp('最短路径:'); disp(shortest_path); ``` 在Python中,可以使用networkx库来实现最短路径问题。具体实现步骤如下: 1. 构造图。使用networkx库中的Graph函数构造一个图,其中添加节点和边。 2. 计算最短路径。使用networkx库中的shortest_path函数计算两个节点之间的最短路径。 以下是一个示例代码: ``` import networkx as nx # 构造图 edges = [(1,2),(1,3),(2,3),(2,4),(3,4),(4,5)] G = nx.Graph() G.add_edges_from(edges) # 计算最短路径 start_node = 1 end_node = 5 shortest_path = nx.shortest_path(G, start_node, end_node) shortest_dist = nx.shortest_path_length(G, start_node, end_node) # 输出结果 print('最短路径距离:') print(shortest_dist) print('最短路径:') print(shortest_path) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值