Сохранение списка из __main__ - PullRequest
0 голосов
/ 27 мая 2020

Определенное решение: следует отметить, что оно должно быть таким же простым, как при итерации, чтобы оно было добавлением к списку ... Однако следует отметить, что большая проблема, почему это не сработало для меня, заключается в том, что я использовал и IDE (Spyder 4.1.3), и когда я запустил код, он не выполнил желаемый результат. Однако, если я сохраню его в py-скрипте и выполню, у него не будет проблем с добавлением данных через итерацию ...

Вывод - если использовать IDE и запустить тест проблем, выполнив весь скрипт чтобы исключить ошибку IDE.

У меня есть класс, который я собираюсь использовать для анализа некоторых данных. Я успешно использовал его и создал переменную, которая сохраняет вывод этого класса. Я могу использовать a для l oop, чтобы увидеть проанализированные данные, но я не могу сохранить их в реальном списке. Может ли кто-нибудь помочь мне получить эти данные?

Class: 

     You can use this code and put it in your own script
class ParseFastQ(object):
    """Returns a read-by-read fastQ parser analogous to file.readline()"""
    def __init__(self,filePath,headerSymbols=['@','+']):
        """Returns a read-by-read fastQ parser analogous to file.readline().
        Exmpl: parser.__next__()
        -OR-
        Its an iterator so you can do:
        for rec in parser:
            ... do something with rec ...
        rec is tuple: (seqHeader,seqStr,qualHeader,qualStr)
        """
        if filePath.endswith('.gz'):
            self._file = gzip.open(filePath)
        else:
            self._file = open(filePath, 'rU')
        self._currentLineNumber = 0
        self._hdSyms = headerSymbols     
    def __iter__(self):
        return self

def __next__(self):
    """Reads in next element, parses, and does minimal verification.
    Returns: tuple: (seqHeader,seqStr,qualHeader,qualStr)"""
    # ++++ Get Next Four Lines ++++
    elemList = []
    for i in range(4):
        line = self._file.readline()
        self._currentLineNumber += 1 ## increment file position
        if line:
            elemList.append(line.strip('\n'))
        else: 
            elemList.append(None)

    # ++++ Check Lines For Expected Form ++++
    trues = [bool(x) for x in elemList].count(True)
    nones = elemList.count(None)
    # -- Check for acceptable end of file --
    if nones == 4:
        raise StopIteration
    # -- Make sure we got 4 full lines of data --
    assert trues == 4,\
           "** ERROR: It looks like I encountered a premature EOF or empty line.\n\
           Please check FastQ file near line number %s (plus or minus ~4 lines) and try again**" % (self._currentLineNumber)
    # -- Make sure we are in the correct "register" --
    assert elemList[0].startswith(self._hdSyms[0]),\
           "** ERROR: The 1st line in fastq element does not start with '%s'.\n\
           Please check FastQ file near line number %s (plus or minus ~4 lines) and try again**" % (self._hdSyms[0],self._currentLineNumber) 
    assert elemList[2].startswith(self._hdSyms[1]),\
           "** ERROR: The 3rd line in fastq element does not start with '%s'.\n\
           Please check FastQ file near line number %s (plus or minus ~4 lines) and try again**" % (self._hdSyms[1],self._currentLineNumber) 
    # -- Make sure the seq line and qual line have equal lengths --
    assert len(elemList[1]) == len(elemList[3]), "** ERROR: The length of Sequence data and Quality data of the last record aren't equal.\n\
           Please check FastQ file near line number %s (plus or minus ~4 lines) and try again**" % (self._currentLineNumber) 

    # ++++ Return fatsQ data as tuple ++++
    return tuple(elemList)
#

Вызов этого класса для создания переменной:

fastqfile=ParseFastQ('filepath')

Затем я хотел определить, что это за класс, поскольку он не позволял мне извлекать проанализированные данные fasqdata

In: type(fastqfile)
Out: __main__.ParseFastQ

Эта часть кода позволит мне распечатать весь вывод

for fastq_obj in fastqfile:
    #This is the header
    print(fastq_obj[0])

Я попытался извлечь эти данные и сохранить их в списке ...

seqHeader=[]
for fastq_obj in fastqfile:
    #This is the header
    seqHeader.append(print(fastq_obj[0]))

Я тоже попытался. продлить, и ничего не было сохранено

Любая помощь будет оценена

1 Ответ

0 голосов
/ 27 мая 2020

Попробуйте следующее:

seqHeader=[]
for fastq_obj in fastqfile:
    #This is the header
    seqHeader.append(fastq_obj[0])

# look at the seqHeader list
print(seqHeader)

Я действительно не могу понять, почему вы пропустили print() fun c внутри append. print() fun c ничего не возвращает, поэтому ничего нельзя добавить в список.

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