在python中通过循环从一个文本文件搜索到另一个,同时每个搜索项只返回一个结果



问题:

我有一个文本文件,每行都包含不同的物种名称,我将在下面包括一个例子,我有另一行,它有一个文件路径和物种名称列表(也包括在下面(。我想在第二个列表中找到第一个列表中的每个物种的例子(返回文件路径(,但每个物种只返回一个。目前,我的代码找到了列表中的第一个物种,并返回该物种的每个实例,然后停止。

示例输入:

以下是物种名称文本文件的子集:

Ferroglobus placidus
Halorubrum arcis
Sulfolobus acidocaldarius

以下是目录和物种名称文件的子集:

file,Species
./refseq/archaea/GCF_001560525.1/GCF_001560525.1_NG05B_C06_12_genomic,Sulfolobus acidocaldarius
./refseq/archaea/GCF_001560525.1/GCF_001560525.1_NG05B_C06_12_genomic,Sulfolobus acidocaldarius
./refseq/archaea/GCF_001560525.1/GCF_001560525.1_NG05B_C06_12_genomic,Sulfolobus acidocaldarius
./refseq/archaea/GCF_001560525.1/GCF_001560525.1_NG05B_C06_12_genomic,Sulfolobus acidocaldarius
./refseq/archaea/GCF_000337015.1/GCF_000337015.1_ASM33701v1_genomic,Halorubrum arcis
./refseq/archaea/GCF_000337015.1/GCF_000337015.1_ASM33701v1_genomic,Halorubrum arcis
./refseq/archaea/GCF_000337015.1/GCF_000337015.1_ASM33701v1_genomic,Halorubrum arcis
./refseq/archaea/GCF_000337015.1/GCF_000337015.1_ASM33701v1_genomic,Halorubrum arcis
./refseq/archaea/GCF_000025505.1/GCF_000025505.1_ASM2550v1_genomic,Ferroglobus placidus
./refseq/archaea/GCF_000025505.1/GCF_000025505.1_ASM2550v1_genomic,Ferroglobus placidus
./refseq/archaea/GCF_000025505.1/GCF_000025505.1_ASM2550v1_genomic,Ferroglobus placidus
./refseq/archaea/GCF_000025505.1/GCF_000025505.1_ASM2550v1_genomic,Ferroglobus placidus

当前代码:当前的代码为物种列表上的第一个名称循环一次,然后停止。

import re
import sys
list = open('speciesnames.txt', "r")
file = open('pathandspeciesname.csv', "r")

for x in list:
for line in file:
if re.findall(x, line):
print (line)

电流输出:

这里是我从上面的代码中得到的输出的一个例子,Ferroglobus placidus的每个实例都被返回,但循环在返回之后停止。

./refseq/archaea/GCF_000025505.1/GCF_000025505.1_ASM2550v1_genomic,Ferroglobus placidus
./refseq/archaea/GCF_000025505.1/GCF_000025505.1_ASM2550v1_genomic,Ferroglobus placidus
./refseq/archaea/GCF_000025505.1/GCF_000025505.1_ASM2550v1_genomic,Ferroglobus placidus

想要的输出:我想要的输出是每个物种都有一条路径,但每个物种只有一条,例如:

./refseq/archaea/GCF_001560525.1/GCF_001560525.1_NG05B_C06_12_genomic,Sulfolobus acidocaldarius
./refseq/archaea/GCF_000337015.1/GCF_000337015.1_ASM33701v1_genomic,Halorubrum arcis
./refseq/archaea/GCF_000025505.1/GCF_000025505.1_ASM2550v1_genomic,Ferroglobus placidus
import re
listofspecies = open("allspeciesfull.txt").readlines()
listoffiles = open("fileid4.csv").readlines()

for x in listofspecies:
for line in listoffiles:
if re.findall(x, line):
print (line)
break

使用break函数意味着每个if语句循环只工作一次,使用readlines函数意味着使用列表而不是文件句柄。

相关内容

最新更新