замена "None" на объект, который возвращает NameError - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть много файлов xml для анализа данных, которые я использую с помощью python.

Например, пожалуйста, рассмотрите Object как результат проанализированных xml данных.
Более того,Object есть Object_A, который я хочу проанализировать.

Моя проблема в том, что существуют случаи, когда Object существует, но Object_A не существует.В этом случае Object_A возвращает NameError, и я не смог продолжить процесс.

Если у Object нет данных Object_A, я хочу заменить значение NA (строки), как показано ниже.

Мой вопрос заключается в том, можно ли заменить None наObject_A как и мои коды.

Подскажите пожалуйста, как решить это дело.

for Object in Objects:
    for Object_A in Objects_A:         
        try:
            Object_A

        except NameError:
            Object_A is None


        if Object_A is not None:
           # some treatment to parse the data(I omitted the code)

        else:
           # instead of parsing the data, subsituting strings "NA"(I omitted the code)

[Отредактировано]

Ниже приведены целые коды.Выше код является модифицированной версией моих кодов для легкого понимания.Таким образом, выше и ниже код не совпадает.

Здесь я использую модули BioPython.И, Objects_A - это разновидности разновидностей_отчетных записей, а Object_A - это описание.Извините за путаницу.

## process of rearrange of blast search result ##
import os
import glob
import pandas as pd
from Bio import SeqIO
from Bio.Blast import NCBIWWW
from Bio import SearchIO
from Bio.Blast import NCBIXML

## path seting
path = 'C:/Users/......................'
os.chdir(path)

# reading the DNA alignment
# getting the untreated folders("_bf" means treated files)
folder_names = [folder_name for folder_name in glob.glob(path + '/' + '*') if "_bf_ald" not in folder_name]

DNA_SampleID = []
Title = []
Score = []
E_value = []
Order_Index = []

# getting the untreated files
for folder_name in folder_names:
    xml_names = [xml_name for xml_name in glob.glob(folder_name + '/*.xml')]
    csv_name = folder_name.strip(path).split("\\")[1]

    for xml_name in xml_names:

        # get the sample ID
        dna_sampleid = xml_name.strip(folder_name).split(".")[0]

        # opening the xml files
        seq_blast_result = open(xml_name)
        species_records = NCBIXML.parse(seq_blast_result)


        dna_sampleID = []
        e_value = []
        score = []
        title = []
        order_index  = []

        for species_record in species_records:
            for description in species_record.descriptions:

                try:
                    description

                except NameError:
                    description is None

                if description is not None:
                    title.append(description.title)
                    score.append(description.score)
                    e_value.append(description.e)
                    dna_sampleID = [dna_sampleid]*len(title)
                    order_index = [num for num in range(1, len(title) + 1)]

                else:
                    title.append('NA')
                    score.append('NA')
                    e_value.append('NA')
                    dna_sampleID = [dna_sampleid]*1
                    order_index.append('NA')


            DNA_SampleID.extend(dna_sampleID)
            Title.extend(title)
            Score.extend(score)
            E_value.extend(e_value)
            Order_Index.extend(order_index)

1 Ответ

0 голосов
/ 13 декабря 2018

Ваш вопрос неясен, но из того, что я понимаю

вы использовали Object_A is None, какое сравнение, а не присваивание

Object_A is None является условным выражением (которое возвращает True, еслиObject_A равно None, в противном случае False)

Чтобы изменить значение Object_A, используйте Object_A = None

...