我有一些转移Matlab代码到Python工作。 我是比较新的Python和我不能确定一个Python相当于Matlab的的textscan
方法。 任何帮助将不胜感激。
Answer 1:
如果您要翻译Matlab的Python的,我会假设你已经使用NumPy的。
在这种情况下,你可以使用np.loadtxt
(如果没有缺少值)或np.genfromtxt
(如果存在缺少值:我不知道Matlab的是否textscan
处理这一点)。
给我们更多的一些细节,如果你需要更多的帮助!
Answer 2:
MATLAB的转换的例子textscan
到Python + NumPy的的np.loadtxt
:
让我们的数据文件results.csv
包含:
0.6236,sym2,1,5,10,10
0.6044,sym2,2,5,10,10
0.548,sym2,3,5,10,10
0.6238,sym2,4,5,10,10
0.6411,sym2,5,5,10,10
0.7105,sym2,6,5,10,10
0.6942,sym2,7,5,10,10
0.6625,sym2,8,5,10,10
0.6531,sym2,9,5,10,10
Matlab代码:
fileID = fopen('results.csv');
d = textscan(fileID,'%f %s %d %d %d %d', 'delimiter',',');
fclose(fileID);
Python的+ NumPy的代码:
fd = open('results2.csv','r')
d = np.loadtxt(fd,
delimiter=',',
dtype={'names': ('col1', 'col2', 'col3', 'col4', 'col5', 'col6'),
'formats': ('float', 'S4', 'i4', 'i4', 'i4', 'i4')})
fd.close()
有关类型的更多信息,请参阅数据类型的对象(D型) 。
Answer 3:
你必须寻找与NumPy和py2mat。 如果我的textscan()的理解是正确的,你可以只使用open()
Answer 4:
如果你的成绩比简单分隔文本更复杂,比如如果有混合的其他文字,无用位,那么你可以使用numpy的的fromregex
功能,以取代textscan
。 fromregex
让您读取在基于正则表达式,用基团(份包围()
作为值。
因此,例如说,你有这样的台词:
field1 is 1, field 2 is 5 to 6.6
field1 is 2, field 2 is 7 to 0.1
你想获得价值数(不是字段名):
[[1, 5, 6.6],
[2, 7, 0.1]]
你可以做
data = np.fromregex('temp.txt', r'field1 is ([\d\.]+), field 2 is ([\d\.]+) to ([\d\.]+)', dtype='float')
的[\d\.]+
匹配任何数目,包括小数位,和()
告诉numpy的使用该结果作为值。 您也可以指定较为复杂dtypes,如具有不同列中有不同的类型,以及指定列名给一个结构数组。 被覆盖的文件中。
然而,利用简单的分隔或固定宽度的数据处理时,它比其他方法更复杂。
文章来源: Python equivalent of Matlab textscan