Поиск через цикл из одного текстового файла в другой в python, при этом возвращая только один результат для каждого элемента поиска - PullRequest
0 голосов
/ 16 ноября 2018

Проблема:

У меня есть текстовый файл, который содержит разные названия видов в каждой строке, я приведу пример ниже, у меня есть другая строка, в которой есть список путей к файлам и названия видов (также включены ниже). Я хотел бы найти каждый пример вида в первом списке, присутствующий во втором списке (с возвращенным путем к файлу), но только один для каждого вида, возвращаемого для каждого вида. В данный момент мой код находит первый вид в списке, возвращает каждый его экземпляр и затем останавливается.

Пример ввода:

Вот подмножество текстового файла названия вида:

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 голосов
/ 19 ноября 2018
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 означает, что используются списки, а не дескрипторы файлов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...