2012-03-02 56 views
0

我们有一个荧光光谱仪,以不舒服/笨的方式输出其荧光数据,以便进一步处理。也就是说,在实际数据开始之前,有55条评论和信息。然后行55开始于列1中的发射波长和列2中的荧光值,其由标签限制器分开。在这些意见,也有在22行的激发波长中的文件看起来像这样(行号并不是文件的一部分,我只是说他们清晰。):使用C++或Python从多个输入文件创建矩阵

Line 1 Stefan 
Line 2 Date: 23.1.2012 
Line 3 WS_40#01.SP 
Line 4 ... 
Line 22 240 
Line 23 ... 
Line 55 300.000000 62.237799 
Line 56 300.500000 59.904189 
Line 57 301.000000 58.901731 
Line 58 ... 
Line 656 600.5  23.900000 

有一个文件对于每个激发波长,其总共对于一个样品(在5nm步骤中从240到455nm激发)共44个文件。 44个谱图的一般文件名存储在一个名为“filename.txt”的文件中。 44个文件以数字命名,例如FILENAME#01.sp,FILENAME#02.sp,...,FILENAME#44.sp

目标: 我想从这44个文件中创建一个矩阵看起来像这样(理想情况下,激发波长从管线22取出,但列名也可以手动创建,因为它们总是相同):

  240 245 250 ... 455 
300.0 62.23 34.4 ... ... 23.5 
300.5 59.90 23.7 ... ... 19.5 
301.0 58.90 23.7 ... ... 34.8 
...  ... ... ... ... 
600.5 23.90 ... ... ... 

最后,矩阵应被存储在文件称为filename.csv

这是如何使用C++或Python可行?

问题是我已经在R中为此编写了一个解决方案。但是我们希望为此提供一个.exe文件,以便实验室技术人员可以在不熟悉R的情况下完成此任务。帮助我们的实验室完成重要的事情。

不幸的是,我没有任何好的python或C++代码开始。

请让我知道,如果问题不知何故不清楚。在这种情况下,我会添加一些信息或重新提出问题。

任何直接帮助或链接到其他网站/职位是非常感谢。

回答

1

在C++中,您可以使用标准模板库从文本文件中读写std::string。例如:

ifstream filenames ("filename.txt", ifstream::in); 

创建一个从“filename.txt”文件读取的对象。您可以通过执行以下操作从文件中获取的每一行:

while (!filenames.eof()) 
{ 
    std::string nextFile; 
    filenames.getline (nextFile); // Note, you may have to #include <string> here 
    // Do something with nextFile here, like open it and read from it, or put it in an array. 
} 

,当你完成读取文件:

filenames.close(); 

您可以用同样的方法从每个读取每一行这44个文件。

0

对于类似于R方式的日常数据分析,您可以使用Pandas Python库。

要将Python脚本转换为.exe文件,您可以使用py2exe

为了简化可执行文件的创建,您可以仅使用Python标准库example编写脚本。

+0

非常感谢您的帮助,代码和有用的链接。特别感谢为此任务编写了python代码的J.F. Sebastian。不幸的是,代码在第40行出现以下错误消息:** ValueError:无法将字符串转换为float:**。在这里,您可以下载一些示例文件:[file#1](http://almost-published.com/files/WS_40%2301.sp)和[file#2](http://almost-published.com/files /WS_40%2302.sp)和[filename.txt](http://almost-published.com/files/filename.txt)。再次感谢您的时间和帮助。对此,我真的非常感激。 Stefan – Strohmi 2012-03-03 07:47:19

+0

@Strohmi:最后有空行。在填充荧光字典时,应该跳过它们[示例](https://gist.github.com/45188c014c1b262983ce)。如果你自己无法做出这样的改变,那么从[tutorial](http://docs.python.org/tut)开始。 – jfs 2012-03-03 14:59:26