如何在MATLAB R2016b(mac版本)中处理带有字符串的CSV文件

如何在MATLAB R2016b(mac版本)中处理带有字符串的CSV文件

问题描述:

我现在正试图在matlab r2016b mac版本中处理大型csv(200万行)。 csv的一小部分如下所示。如何在MATLAB R2016b(mac版本)中处理带有字符串的CSV文件

user_id,video_id,session,new_speed,old_speed,new_time,old_time,event_type,event_time 
a74fe6d4812fa93a1afa1a6a334ebdda,af7f974d395a4adddc8ab17a83996073,892d85cfeea8298fb7ca8755ac090e90,,,,,play_video,2015-04-06 22:20:58.928268 
a74fe6d4812fa93a1afa1a6a334ebdda,af7f974d395a4adddc8ab17a83996073,892d85cfeea8298fb7ca8755ac090e90,,,161.0,72.581,seek_video,2015-04-06 22:20:58.879149 
a74fe6d4812fa93a1afa1a6a334ebdda,7fb29805973a8a396c6de3faa8290ac1,892d85cfeea8298fb7ca8755ac090e90,,,,,play_video,2015-04-06 22:24:14.988693 
a74fe6d4812fa93a1afa1a6a334ebdda,9ace07b312f206ef7af2f48188360b16,892d85cfeea8298fb7ca8755ac090e90,,,,,load_video, 

我想要做的是为

  1. 读取csv文件到MATLAB;
  2. 将用户标识和视频标识映射到简单号码标识;
  3. 删除会话ID。

我已经尝试了很多方法,但无法得到我想要的结果。 csvread无法处理此csv文件,因为里面有一些非数字项目,而我不熟悉fopen,并且总是会出现一些奇怪的错误,例如所有数据进入单个单元格。有没有解决这个问题的方法?

+0

难道我的回答解决问题了吗? –

+0

@ Poyuan.Bn对不起,我刚刚检查了它。它的工作原理和非常感谢! – Vinnton

由于您提到的文字格式不同,因此使用textread()函数将是个不错的主意。它返回1D单元阵列。所以,首先你必须regexp()和索引的细胞以这种方式来分析它:

Thecell{row}{column} %accessing cell elements 

这里,我们去:

cellarray = textread('Put directory here','%s',9); 

for i=1:length(cellarray) 
parsed_cell{i} = regexp(cellarray, ',', 'split'); %% Parsing 1d cell 
end 

%% 3 items which you wanted for e.g. the first line 
line1 = parsed_cell{1}; 
line1{1}{3} = []; %% Deleting session id in line 1 of the text. 
        %%easily can be implemented for others 

%% putting user_id,video_id into number id in line 1. 
numberid = [line1{1}{1},line1{1}{2}]; 

我无法想象你将如何处理这些字符串。如果你只是需要编辑文件,我建议使用python(这是最简单的,但不是最快的,虽然比matlab快)或C(这是因为你的条件2百万行速度非常快,但不是最简单的)。根据我在Matlab中看到的,它非常擅长矩阵的数学运算,但对于你想做的事情来说不是一个好的选择。也许如果你说出你将要处理的所有数据(我的意思是数学运算符在你所说的之后),那么有人可以提供帮助!

+0

感谢您的评论!我正在努力是否应该转向python。但是因为我以前没有用过Python,请给我一些关于我可以用来解决这个问题的函数的提示吗? – Vinnton

+0

有一个用于处理csv文件的好库:https://docs.python.org/3/library/csv.html你可以在文档中看到一些示例 – Ehsan

+0

非常感谢你的帮助! – Vinnton