首页 > 解决方案 > 在 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

标签: pythonloops

解决方案


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


推荐阅读