如何在Python文本文件中找到某个字符串的行号?
我编写了一个Python脚本,它打开了一个包含质谱数据的csv文件列表,使用Numpy.genfromtxt收集数据,使用statsmodels基于这些数据进行计算,并将结果返回到一个已编译的excel文件中。 在CSV文件中,根据实验的运行条件,标题和内部结构的大小可能不同 现在我使用configparser读取的配置文件,并针对不同的实验条件使用不同的配置文件。然而,这是相当笨重 我想做的是测量数据帧的头大小和长度,而不是从配置文件中读取它。每个同位素的数据以字符串开头,例如:如何在Python文本文件中找到某个字符串的行号?,python,Python,我编写了一个Python脚本,它打开了一个包含质谱数据的csv文件列表,使用Numpy.genfromtxt收集数据,使用statsmodels基于这些数据进行计算,并将结果返回到一个已编译的excel文件中。 在CSV文件中,根据实验的运行条件,标题和内部结构的大小可能不同 现在我使用configparser读取的配置文件,并针对不同的实验条件使用不同的配置文件。然而,这是相当笨重 我想做的是测量数据帧的头大小和长度,而不是从配置文件中读取它。每个同位素的数据以字符串开头,例如: *#ISOT
*#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)
我假设有一个简单的解决方案,但我的编程技能到目前为止还不是很好
有人能帮忙吗
干杯还不完全清楚,但我的理解是,在一个文件中有一组CSV ish数据集,每个数据集都有一个标题行(以
*#同位素
开头)和一个空白的“页脚”行
根据大小,一个选项可能是以基本方式打开文件(使用open
builtin),然后循环:
- 处理魔法头(读取一行并解析该行)
- 将所有内容复制到临时文件或StringIO,直到第一个空行
- 将tempfile或StringIO解析为CSV,按常规处理
重复此操作直到文件结束。好的,马斯克林为我指出了正确的方向。以下代码返回我要查找的节的索引:
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
非常感谢 你有没有试过pandas.read_csv(…)?@mrzo他们提到的是pandas.read_csv选项的
usecols=1
,所以很有可能是他们用来加载csv文件的。您好,我上面的方法是使用np.genfromtxt,而不是pandas。我使用numpy进行部分实际计算。我现在试着用熊猫,但是,它给出了一个错误“第3行预期有2个字段,SAW3。不幸的是,我对编程相当陌生。谢谢你的回答。事实上,我有一大堆csv-ish文件,这些文件有复杂的标题,我成批读取,每个csv文件都有5个子部分,我在其中读取。我的当前程序被告知从何处开始查找数据并忽略标题。我希望程序能够识别从何处开始,基本上是“测量”标题长度,即有效地计算行数,直到出现某个字符串。原理是一样的:使用open
打开文件,提取您需要的任何信息(迭代文件或使用read
或readline
)然后将其传递到管道的其余部分(可能事先关闭文件)。我认为这应该可以,我将尝试一下……)