如何在Python文本文件中找到某个字符串的行号?

2024-05-21 04:56:48 发布

您现在位置: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)

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

有人能帮忙吗

干杯


Tags: 文件数据no脚本标题time配置文件条件
2条回答

好的,马斯克林给我指出了正确的方向。以下代码返回我要查找的节的索引:

FileList = (glob.glob("*.csv"))
for FileToProcess in FileList:
        with open(FileToProcess) as readfile:
            for cnt, line in enumerate(readfile):
                if "#ISOTOPE" in line:
                    print("Line {}:{}".format(cnt, line))
        readfile.close

非常感谢

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

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

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

重复此操作,直到文件结束

相关问题 更多 >