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

2024-06-08 00:20:45 发布

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

Tags: 列表物种gcfgenomicrefseqc06archaeaferroglobus
1条回答
网友
1楼 · 发布于 2024-06-08 00:20:45
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函数意味着使用的是列表而不是文件句柄

相关问题 更多 >

    热门问题