在Python中通过循环从一个文本文件搜索到另一个文本文件,而每个搜索项仅返回一个结果

时间:2018-11-16 11:13:14

标签: python loops

问题:

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

示例输入:

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

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

1 个答案:

答案 0 :(得分:0)

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函数则意味着正在使用列表而不是文件句柄。