首页 > 解决方案 > 如何在 Python 的文本文件中找到某个字符串的行号?

问题描述

我编写了一个 Python 脚本,它打开一个托管质谱数据的 csv 文件列表,使用 Numpy.genfromtxt 收集数据,使用 statsmodels 根据这些数据进行计算,并将结果返回到编译后的 excel 文件中。在 CSV 文件中,标题和内部结构的大小可能会根据实验的运行条件而变化。

现在我使用我用 configparser 读取的配置文件,并且针对不同的实验条件使用不同的配置文件。然而,这很笨拙。

我想要做的是测量标头大小和数据帧的长度,而不是从配置文件中读取它。每个同位素的数据都以字符串开头,例如:

*#ISOTOPE, 'Ar36:L2S1'* and *#ISOTOPE, 'Ar37:L1S1'*

后面是每个同位素的数据(3 列),例如:

*#ISOTOPE, 'Ar36:L2S1'*

No, Time, Intensity

1, 101.4685919, 1.845379369941e-003

2, 102.4901003, 2.153738546096e-003

.....

599, 701.1342959, 2.087938052439e-003

600, 702.1343039, 2.000204060898e-003

(blank line)

*#ISOTOPE, 'Ar37:L1S1'*

No, Time, Intensity

1, 101.4685919, -1.103785922163e-004

2, 102.4901003, 3.526673114000e-004

等等

我想确定每个同位素的数据行号和数据长度。

然后,当我尝试导入整个数据文件而不忽略标题(计算行索引)时,我得到与列数相关的错误。我尝试 usecols = 1 忽略其余部分,但这不起作用。(valueerror)

我认为有一个简单的解决方案,但到目前为止我的编程技能不是很好。

任何人都可以帮忙吗?

干杯

标签: python

解决方案


尚不完全清楚,但我的理解是您在单个文件中有一堆 CSV-ish 数据集,每个文件都有一个标题行(以 开头*#ISOTOPE)和一个空白的“页脚”行?

根据大小,一个选项可能是以基本方式打开文件(使用open内置),然后循环:

  • 处理魔术头(读取一行并解析)
  • 将所有内容复制到临时文件或 StringIO 直到第一个空行
  • 将 tempfile 或 StringIO 解析为 CSV,照常处理

重复直到文件结束。


推荐阅读